我遇到这个问题,我的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
而感到分段错误。
答案 0 :(得分:2)
有人可以解释一下这里发生了什么。具体来说,为什么将数组大小更改为1会使代码运行正常。
您正在使用ptr
而未初始化它。更改数组的大小会改变堆栈的布局,并且您的代码运气良好。
我需要稍后使用ptr但是因为它是nil
我会得到分段错误
然后为它分配一些内存:
ptr = malloc(sizeof *ptr);
答案 1 :(得分:1)
您正在访问未初始化的变量,因此您依赖未定义的行为;结果可能是任何事情。
在实践中,当你的程序运行时,你会看到堆栈中出现垃圾的人工制品。