繁体   English   中英

使用节点指针,简单的C ++程序就会崩溃

[英]Simple C++ program crashes once using node pointers

所以我从没真正学过图论,但是我看过一些例子,所以我想自己尝试一下。 我做了一个简单的程序,看起来像这样:

struct node
{
   node* prev;
   node* next;
   int num = 0;
   /*node()
   {
      prev = new node();
      next = new node();
   }*/
};

int main()
{
   node* curr = new node();
   curr->num = 1;
   curr->prev = curr;
   curr = curr->next;
   curr->num = 2;

   return 0;
}

当我取消注释构造函数时,它在main()的第一行崩溃。 注释掉后,它会崩溃“ curr-> num = 2;” 线。 我实际上不知道为什么会这样,所以想找出答案。 谢谢!

node()
{
    prev = new node();
    next = new node();
}

创建新节点后,您将再创建2个节点。 这个过程永远不会停止,它是递归的。

您的第一个问题是UKMonkey提到的。

第二个是

   curr = curr->next;
   curr->num = 2;

移至curr->next next后,您curr->next为下一个分配内存,因此您无法将值分配给尚未初始化的位置。

实际上,由于您将curr设置为curr->next NULL,所以程序在cum->num = 2崩溃。

如果取消注释ctor,则由于创建无限循环的初始化,程序将再次崩溃。 看一下堆栈跟踪:

我可以举一个可行的例子:

struct node
{
    node* prev;
    node* next;
    int num = 0;
};

int main()
{
    node* curr;

    // Make a root node:
    node* root = new node();
    root->num = 1;
    // Create a child node
    root->next = new node();

    // Set '2' at the child node
    curr = root->next;
    curr->num = 2;
    // Create a child of the child node
    curr->next = new node();

    // Set '3' at the child node of the child node
    curr = curr->next;
    curr->num = 3;

    // Etc...

    return 0;
}

对其进行调试以更好地理解:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM