• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

为什么我不能在堆栈内存而不是堆上实现链表?

用户头像
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
系列文章
更多 icon
同类精品
更多 icon
继续加载