【发布时间】:2013-10-28 06:28:51
【问题描述】:
我编写了以下代码,仅在 C++ 中创建节点(整数数据)并将其插入到 SLL 中。
#include <stdio.h>
class Node
{
public:
int data;
Node * next;
Node * first;
Node() {}
void insert(int dat)
{
Node * newnode = new Node();
newnode->data=dat;
newnode->next=NULL;
if(first==NULL)
{
first=newnode;
}
else
{
Node *temp=first;
while(temp->next!=NULL)
{ temp=temp->next; }
temp->next=newnode;
}
}
};
int main()
{
Node * a=new Node();
a->insert(12);
return 0;
}
起初,我尝试将 Node 构造函数重写为 Node(int dat),并尝试对我在插入中创建的每个新节点 (data=dat, next=NULL) 进行初始化。 Insert 将使用 main 中的“dat”值调用,它会调用重载的 Node 构造函数以将数据初始化为 dat 和 NULL 旁边。这导致我的程序崩溃。
所以我取出了默认构造函数和重载构造函数,并对插入本身中的每个新元素进行了初始化。我的程序运行良好。但是,即使添加默认构造函数(如代码的第 10 行所示),我的程序也会崩溃。谁能告诉我为什么这两种情况都会发生?
谢谢。
【问题讨论】:
-
上面的代码对我来说不会崩溃。那是给你带来问题的代码吗?
-
Paul Draper - 是的,我复制粘贴了它。我正在使用 Dev-C++ 4.9.9.2。如果我只删除第 10 行,即构造函数,它就可以工作。
-
您真的希望在每个节点中都有一个
first指针吗?通常first是单链表的成员,但不是节点的成员。除此之外,您永远不会初始化first并且比较 (first == NULL) 可能会触发或不会触发。 -
好吧,如果它能让你感觉好些,那么它与 g++ 4.6.3 一起工作就好了:/
-
你试过调试器吗?
标签: c++ constructor linked-list