为什么我的显示功能会终止程序?
Why does my display function terminate the program?
所以我整天都在研究这个程序,所以我可能只是筋疲力尽,但对于我的生活,我无法弄清楚为什么我的显示函数在第一次完成打印后终止程序。我真的需要能够在每个输入循环上打印整个列表。我尝试通过将其包装在循环中并添加 print 语句进行测试来调试它,整个程序运行良好,除了在我打印列表后它终止的事实。
#include<iostream>
using namespace std;
class Node
{
public:
int data;
Node *next;
Node()
{
next = 0;
}
Node(int data)
{
this->data = data;
}
};
class list
{
private:
int Count = 0;
Node *start;
public:
list()
{
start = 0;
}
void display()
{
Node *temp = new Node;
temp = start;
while (temp != 0)
{
cout << temp->data << " ";
temp = temp->next;
}
}
bool insert(int value)
{
Node *newNode = new Node(value);
Node *temp = new Node;
Node *cur = new Node;
Node *pre = new Node;
int track = 0;
cur = start;
if (start == 0)
{
start = newNode;
Count++;
}
else if (value < cur->data)
{
temp->data = value;
temp->next = start;
start = temp;
Count++;
}
else
for (int i = 0; i < Count; i++)
{
if (value > cur->data)
{
pre = cur;
cur = cur->next;
track++;
}
}
if (track > 0)
{
temp->data = value;
pre->next = temp;
temp->next = cur;
Count++;
}
return true;
}
};
int main(void)
{
int input = 0;
list obj;
while (input != -1)
{
cout << "Enter a value: ";
cin >> input;
if (input != -1)
obj.insert(input);
obj.display();
}
}
;
Node(int data){this->data=data;}
采用int
的Node
构造函数仅初始化data
,而不初始化next
。
所以在
Node *newNode=new Node(value);
newNode
指向带有垃圾next
指针的Node
。
第一次通过insert()
进入此分支时:
if(start==0){
start = newNode;
然后,以下对display()
的调用将执行此代码:
temp=start;
while(temp!=0){
cout<<temp->data<<" ";
temp=temp->next; // Bang! temp->next is garbage.
最后一行具有未定义的行为:您正在尝试使用未初始化的指针值并将其分配给temp
。这最迟可能会在cout<<temp->data
(在循环的下一次迭代中(崩溃。
相关文章:
- 堆栈粉碎终止程序
- 为什么我的显示功能会终止程序?
- 调用 raise(signal) 会终止 c++ 程序
- 使用终止程序的指针在数组中输入字符串
- C++ Argv[1] 终止程序,返回值 9009
- protobuf "oneof" sub-protobuf 对象指针终止程序
- QCoreApplication事件循环和Windows服务控制处理程序功能
- 有没有办法避免在发生堆栈粉碎时终止程序
- c++ 终止程序的内存泄漏何时重要?
- C :CTRL D终止程序(Ubuntu)
- 用信号25终止程序,超过文件尺寸限制;为什么
- 是否有一种方法可以在输入负数时平均不包括负数,这是您终止程序的方式
- 正确关闭应用程序:终止程序的替代方案
- 驱动程序功能到底是什么
- 提升线程终止程序
- Shell脚本终止程序,但导致无法写入输出文件
- 访问引用变量会终止程序
- 需要使用"enter"密钥终止程序
- C++按Enter键终止程序
- 餐厅计费程序功能