[英]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.