【发布时间】:2021-05-25 22:07:15
【问题描述】:
为什么我可以创建一个指针数组并取消引用它的(指针)元素。
int a = 1;
int* arr[1];
arr[0] = &a;
但不能对指针做同样的事情:
int** arr2;
arr2[0] = &a;
--> Seg fault
【问题讨论】:
-
您没有在指针指向的地方分配任何内存并且指针未初始化,因此这是未定义的行为。
-
当你创建一个数组时,内存是隐式分配在栈上的,所以你可以立即访问它。当你想使用指针时,你需要使用
arr2 = malloc(sizeof(int*))自己分配内存。
标签: arrays c pointers segmentation-fault pointer-to-pointer