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 分配内存。
以及在堆栈或堆上分配数据字段的内存的位置。--------
解决方案
在您的代码中,ptr->data=3;
调用未定义的行为,因为ptr
它不指向任何有效的内存位置。
在尝试取消引用它之前,您需要确保它ptr
指向一个有效的内存位置。
在您的情况下,它似乎可以正常工作,这也是未定义行为最危险的副作用之一。
也就是说,ptr
有自动存储。它指向的内存将取决于所使用的分配。C 标准没有堆栈或堆的概念——这取决于实现。
推荐阅读
- actionscript-3 - 计时器不会造成延迟
- php - 如何让 admin-ajax.php 本地化和脚本入队
- php - 使用 if else 语句更新或插入数据
- javascript - 在 Javascript 中将 100000 行导出为 CSV
- python - 即使在使用 except 并正确尝试之后也会出现意外的缩进
- c - 使用gets()进行缓冲区溢出攻击
- ocaml - OCaml:当我将包添加到命令行时,Ocaide 不再执行新的字节码
- powerbi - 与具有多个字段的日期表的关系
- python - 根据日期在 matplotlib 中指定 x 轴
- azure-devops - Azure DevOps 如何在发布时替换服务结构项目的 Cloud.xml 参数中的值,这些值作为变量保存