我有一個函數,函數的基本思想是改變什麼a
指向。第一個版本可以工作,但第二個版本不能。C指針異常請詳細解釋
有人能幫我理解這裏發生了什麼嗎?
// this works
void swap(int **a) {
int *temp = malloc(sizeof(int) * 3);
temp[0] = 0;
temp[1] = 1;
temp[2] = 2;
*a = temp;
}
// this does not
void swap(int **a) {
*a = malloc(sizeof(int) * 3);
*a[0] = 0;
*a[1] = 1; // seg fault occurs on this line
*a[2] = 2;
}
我打電話,像這樣
int main() {
int b[] = {0,1};
int *a = b;
swap(&a);
return 0;
}
而且,這兩種功能不同時屬於同一個文件的功能。
你在第二個函數中做了非常錯誤的事情。 – wRAR 2013-03-25 18:52:27
爲什麼用同名的參數命名一個新的變量? – 2013-03-25 18:56:01
重新聲明第二個交換函數中的int數組是在這裏發佈時的疏忽。我已經從問題中刪除了它。 – robbmj 2013-03-25 19:04:35