首页 > 解决方案 > 为什么我在评论 malloc() 调用时会出现分段错误(核心转储)?

问题描述

int main()
{
    struct stuff
    {
        int num;
    }*foo;

    // If I comment the line below, I get core dump error.
    // Why?
    foo = (struct stuff *)malloc(sizeof(struct stuff));
    (*foo).num = 7;

    printf("%d\n", (*foo).num);
}

标签: cpointersstructmalloc

解决方案


您只能取消引用有效指针。

在您的情况下,foo除非显式初始化,否则作为自动局部变量包含一些不确定的值,即它指向任意内存位置,这从您的程序的角度来看几乎是无效的。

如果您没有分配一个有效的指针foomalloc()例如,返回),foo指向某个不确定的内存位置并尝试取消引用它将调用未定义的行为

分段错误是 UB 的副作用之一。


推荐阅读