为什么我不能在堆栈内存而不是堆上实现链表?
it1352
帮助23人
问题说明
struct node{
int data;
node* next;
}
int main(){
Node *head; head->data = 999;
Node *new_node; new_node->data = 1; head->next = new_node;
cout << (head->next)->data;
}
此代码不起作用。如果我使用分配,它是有效的。我试着在谷歌上搜索,但没有人问这个问题。
我的代码是基于我对链表的理解。所以,尽管来烤我吧。
正确答案
#1
创建 Node*
您创建的是节点指针,而不是节点。这只是一个保存内存地址的变量,而该内存地址将保存一个节点。因为您没有分配任何内存,所以当您使用->
操作符时,实际上没有节点可用。基本上,它不会在您的代码中工作,因为您正在尝试取消引用一个未初始化的指针,然后修改尚未分配的内存。
至于为什么不能用静态内存创建链表这一总体问题,这是因为堆栈上的作用域规则和自动内存管理。链表的思想是根据节点的内存地址将节点链接在一起。如果在堆栈上创建每个节点,则这些节点将在超出作用域后被删除,因此即使您保留指向其内存地址的指针,假设它们不会被其他内容覆盖也是不安全的。当然,只有当您没有将整个事情保持在相同的范围内,并且很可能不是您想要的情况下,才会出现这种情况。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /reply/detail/tancee
系列文章
更多
同类精品
更多
-
YouTube API 不能在 iOS (iPhone/iPad) 工作,但在桌面浏览器工作正常?
it1352 07-30 -
iPhone,一张图像叠加到另一张图像上以创建要保存的新图像?(水印)
it1352 07-17 -
保持在后台运行的 iPhone 应用程序完全可操作
it1352 07-25 -
在android同时打开手电筒和前置摄像头
it1352 09-28 -
使用c++17更新时出现G++编译器警告
it1352 06-18 -
使用 iPhone 进行移动设备管理
it1352 07-23 -
扫描 NFC 标签时是否可以启动应用程序?
it1352 08-02 -
复制文件夹/文件而不修改属性?
it1352 07-15 -
Android App 和三星 Galaxy S4 不兼容
it1352 07-20 -
Android微调工具-删除当前选择
it1352 06-20