#include "stdio.h"
struct List {
int i;
};
int main() {
int c[5] = {3,1,2,5,4};
struct List **list;
printf("----%p\n",list);
struct List one = {0};
struct List two = {1};
list[0] = &one;
list[1] = &two;
printf("One: %p\n", list[0]);
printf("Two: %p\n", list[1]);
return 0;
}
结果打印:
----0x0
Segmentation fault: 11
刚学C语言。这里有什么问题?然后,如果我删除 "int c[5] = {3,1,2,5,4}"行,代码工作正常。但它打印:
----0x7fff5d9a99a0 (1
One: 0x7fff5d9a9978 (2
Two: 0x7fff5d9a9970 (3
为什么“(1”的地址与“(2”的地址不同?
“指向指针的指针”是否可以视为数组?
最佳答案
您尚未为 list
分配任何内存,因此对其应用索引运算符会导致未定义的行为。
通过分配一个指向 list
的两个指针的数组来修复它:
struct List **list = malloc(2 * sizeof(List*));
请注意,使用%p
打印需要传递void*
:
printf("----%p\n", (void*)list);
...
printf("One: %p\n", (void*)list[0]);
printf("Two: %p\n", (void*)list[1]);
最后,您需要在完成后释放指针以避免内存泄漏:
free(list);
return 0;
关于c - 为什么我的 C 代码打印 Segmentation fault : 11?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43444717/