This question already has answers here:
Why do these pointers cause a crash?
                                
                                    (5个答案)
                                
                        
                                2年前关闭。
            
                    
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);
}

最佳答案

仅允许您取消引用有效的指针。

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

如果没有为foo分配有效的指针(例如,由malloc()返回),则foo指向某个不确定的内存位置,并尝试取消引用它将调用undefined behaviour

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

关于c - 为什么在评论malloc()调用时出现段错误(内核已转储)? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52903287/

10-15 00:23