首页 > 解决方案 > 指向结构的指针声明会为其成员分配内存吗?

问题描述

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

程序的输出

#include< stdio.h>

struct node  {
    int data;
};

int main() {

    struct node *ptr;

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

    return 0;
}

输出:3

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

例如结构节点n;

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

以及在堆栈或堆上分配数据字段的内存的位置。--------

标签: cpointers

解决方案


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

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

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

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


推荐阅读