C 结构指针总是初始化为nil

C 结构指针总是初始化为nil,c,pointers,struct,C,Pointers,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
。下面是我的代码

#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"
}
#包括
结构SomeStruct{
int x;
};
int main()
{
int数组[2];//如果我将其更改为1,代码工作正常
struct SomeStruct*ptr;
printf(“%p\n”,ptr);//始终打印“nil”
}
有人能解释一下这里发生了什么事吗。具体来说,为什么将数组的大小更改为1会使代码运行良好


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

您正在访问一个未初始化的变量,所以您依赖于未定义的行为;结果可能是任何事情


实际上,当程序运行时,您会看到堆栈上出现的垃圾的伪影。

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

实际上,当您的程序运行时,您看到的是堆栈上任何垃圾的人工制品

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

您正在使用
ptr
,但未对其进行初始化。更改数组的大小会更改堆栈的布局,并且您的代码会幸运地执行“很好”

我需要稍后使用ptr,但由于它是零,所以我得到了分段错误

然后为其分配一些内存:

ptr = malloc(sizeof *ptr);
有人能解释一下这里发生了什么事吗。具体来说,为什么将数组的大小更改为1会使代码运行良好

您正在使用
ptr
,但未对其进行初始化。更改数组的大小会更改堆栈的布局,并且您的代码会幸运地执行“很好”

我需要稍后使用ptr,但由于它是零,所以我得到了分段错误

然后为其分配一些内存:

ptr = malloc(sizeof *ptr);

谢谢!我可以问的最愚蠢的问题:(宁是ptr=malloc(sizeof(struct somestruct));@LtWorf我更喜欢我的版本,非常感谢,因为如果有人更改
ptr的类型,它仍然会做正确的事情。非常感谢!我可以问的最愚蠢的问题:(宁是ptr=malloc(sizeof(struct somestruct));@LtWorf我更喜欢我的版本,非常感谢,因为如果有人更改
ptr
的类型,它仍然会做正确的事情。如果您复制此代码,并尝试使用1或2,就像您的注释一样,它将是相同的=>(nil)。您的ptr未设置为任何值,因此此时它可能会使用堆栈上的垃圾值…如果您按原样复制此代码,并尝试使用1或2,就像您的注释状态一样,它将是相同的=>(nil)。您的ptr未设置为任何值,因此此时它可能会使用堆栈上的垃圾值。。。