c - 为什么我的 C 代码打印 Segmentation fault : 11?

标签 c

#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/

相关文章:

c++ - 使用对讲机进行远程内存访问

c - 为什么 snprintf 更改输出字符串?

python - Cython Memoryview 段错误

c# - Web 服务可以在 asp.net 中运行,但不能在 IIS 中运行

c - 如何防止Waf重命​​名目标文件?

c - Netbeans C 程序构建因 tdm-gcc msys 失败

c - 链接时优化的 undefined reference

c - 为什么信号处理出现故障?

c - PIC32 UART 初始化后发送垃圾字符

c - atmega8a 熔断外部晶振 16MHz