#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标准没有堆栈或堆的概念 - 这取决于实现.
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |