结构的指针声明是否会为其成员分配内存?

Dee*_*ary 2 c pointers

检查turbo c ++上的程序图像

程序输出

#include< stdio.h>

struct node  {
    int data;
};

int main() {

    struct node *ptr;

    ptr->data=3;
    printf("%d",ptr->data);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:3

我的问题是,即使我没有声明结构节点的实例.

例如struct node n;

我还没有使用malloc为ptr分配内存,它仍然为ptr-> data分配空间.为什么?它不应该只为堆栈上的地址ptr分配内存.

并且在堆栈或堆上分配数据字段的内存.---------

Sou*_*osh 10

在您的代码中,ptr->data=3;调用未定义的行为,因为ptr它不指向任何有效的内存位置.

ptr在尝试取消引用它之前,您需要确保指向有效的内存位置.

似乎在您的情况下正常工作,这也是未定义行为的最危险的副作用之一.

也就是说,ptr有自动存储.它指向的内存取决于所使用的分配.C标准没有堆栈或堆的概念 - 这取决于实现.

  • @DeepChaudhary TC++几乎没有关注整个内存.它可以写入字符串文字,数据端口,属于其他程序的内存,操作系统安装目录,任何东西.因此,当您调用未定义的行为时,它可能看起来工作正常,或者它可以永久地杀死您的PC,或者它可以在您的花式LPT端口点阵打印机上打印死猫的照片. (2认同)