gpt4 book ai didi

c - 指向结构的指针声明会为其成员分配内存吗?

转载 作者:行者123 更新时间:2023-12-02 05:40:07 26 4
gpt4 key购买 nike

check the image of program on turbo c++

output of program

#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 分配内存。

数据字段的内存是在栈上还是堆上分配的。--------

最佳答案

在您的代码中,ptr->data=3; 调用 undefined behavior ,因为 ptr 没有指向任何有效的内存位置。

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

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

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

关于c - 指向结构的指针声明会为其成员分配内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53102606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com