Tôi có chức năng, ý tưởng cơ bản của hàm là thay đổi những gì a
trỏ đến. Phiên bản đầu tiên hoạt động tuy nhiên phiên bản thứ hai thì không.Bất thường con trỏ C, vui lòng giải thích
Ai đó có thể giúp tôi hiểu điều gì đang xảy ra ở đây không?
// 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;
}
Tôi gọi hàm như vậy
int main() {
int b[] = {0,1};
int *a = b;
swap(&a);
return 0;
}
Ngoài ra, cả hai chức năng không thuộc về cùng một tập tin cùng một lúc.
Bạn đang làm điều gì đó rất sai trong hàm thứ hai. – wRAR
Tại sao đặt tên cho một biến mới có cùng tên của paramater? –
re tuyên bố mảng int trong hàm hoán đổi thứ hai là một sự giám sát khi đăng ở đây. Tôi đã xóa nó khỏi câu hỏi. – robbmj