0

我遇到了这个问题,我的结构指针在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

4

2 回答 2

2

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

您正在使用ptr而不初始化它。更改数组的大小会更改堆栈的布局,并且您的代码可以“很好”地执行。

我需要稍后使用 ptr 但我得到分段错误,因为它是 nil

然后给它分配一些内存:

ptr = malloc(sizeof *ptr);
于 2013-02-10T11:39:15.707 回答
1

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

在实践中,当您的程序运行时,您会看到堆栈中发生的任何垃圾的人工制品。

于 2013-02-10T11:39:06.553 回答