#include<iostream>
using namespace std;
class list
{
public:
list();
bool insertHead(int n);
private:
struct node
{
int item;
node *next;
};
node* head;
};
list::list()
{
head = NULL;
head -> item = 0;
head -> next = NULL;
}
bool list::insertHead(int n)
{
node* tempptr = new node;
tempptr->item = n;
tempptr->next = head;
head = tempptr;
return true;
}
int main()
{
list test1;
test1.insertHead(4);
return 0;
}这段代码编译得很好,但不幸的是在运行时出现了分段错误。我尝试在insertHead函数的末尾添加delete tempptr,但是没有用。我很不擅长内存分配,我知道分段错误与运行时的内存分配有关。有人能帮我吗?我只是使用insertHead在链表的前面插入一个整数。有人能帮我吗?谢谢!我将实现和其他文件组合在一起,这样更容易阅读……我想。谢谢
发布于 2013-07-18 15:02:26
你真的对这段代码崩溃感到惊讶吗?
head = NULL;
head -> item = 0;
head -> next = NULL;您将NULL赋值给一个指针并立即引用它。
发布于 2013-07-18 15:02:06
head = NULL;
head -> item = 0;
*** segmentation fault, beacuse head is null, can't dereference
head -> next = NULL;发布于 2013-07-18 15:03:29
我建议使用GDB,用这个程序运行gdb。当它分段时,它会给你一个堆栈跟踪,准确地跟踪程序seg出错的位置。然后,您可以使用'p命令‘打印相关变量。Seg错误总是意味着访问您的进程范围之外的内存(具有不在您的进程内的值的指针-无效指针)。学会使用GDB会节省你很多时间,这是一个针对seg错误的insta-fix :-)
https://stackoverflow.com/questions/17716637
复制相似问题