struct指针总是初始化为nil

时间:2013-02-10 11:38:14

标签: c pointers struct

我遇到这个问题,我的struct指针总是默认初始化为nil。以下是我的代码。

#include <stdio.h>

struct SomeStruct {
    int x;
};

int main()
{
    int array[2];  // If I change this to 1, the code works fine

    struct SomeStruct *ptr;
    printf("%p\n", ptr);  // always prints "nil"
}

有人可以解释一下这里发生了什么。具体来说,为什么将数组大小更改为1会使代码运行正常。

以上是一些较大代码的一部分,我能够将问题简化为此。我需要稍后使用ptr,但我会因nil而感到分段错误。

2 个答案:

答案 0 :(得分:2)

  

有人可以解释一下这里发生了什么。具体来说,为什么将数组大小更改为1会使代码运行正常。

您正在使用ptr而未初始化它。更改数组的大小会改变堆栈的布局,并且您的代码运气良好。

  

我需要稍后使用ptr但是因为它是nil

我会得到分段错误

然后为它分配一些内存:

ptr = malloc(sizeof *ptr);

答案 1 :(得分:1)

您正在访问未初始化的变量,因此您依赖未定义的行为;结果可能是任何事情。

在实践中,当你的程序运行时,你会看到堆栈中出现垃圾的人工制品。