C++链表导致分段错误



我的代码如下,当我试图通过程序"加载文件"时,就会出现问题。它会询问我的文件名,当我给它一个它能找到的文件名时,它只会说"Segmentation Fault"并停止运行。我认为问题要么来自loadFile方法本身,要么来自第244行,我在那里编写了向linkedlist添加元素的方法。感谢您的帮助!谢谢

http://pastebin.com/7qZY9Hef

第224行:

void countyElectionList::push_back(countyElectionResults * newCER){
if(head == NULL)
head = newCER;
else
{
countyElectionResults * current = head;
while(current->getNextResult() != NULL){
current = current->getNextResult();
}
current->setNextResult(newCER);
}
}

根据您链接的URL上的源代码(由于多种原因不会编译,包括缺少括号和函数缺少返回语句等),问题在于:

// A constructor that initializes the private data members
countyElectionList::countyElectionList(){
}

您从未将countyElectionList::head初始化为NULL,因此当您调用countyElectionList::push_back时,head的值很可能不是指向NULL,而是指向谁知道。。。因此发生了碰撞。

供将来参考:当您调试崩溃时,如果发生崩溃的函数看起来不可疑,并且您在源代码中找不到故障,并且在逐步执行逻辑时,您应该继续检查函数的调用方。

更新:因此,在检查了新的pastebin代码(仍然没有编译,因为几个声称返回值的函数缺少返回语句)后,错误仍然存在于同一个函数中:

// A constructor that initializes the private data members
countyElectionList::countyElectionList(){
countyElectionList::head == NULL;
}

请注意,您使用的==比较运算符,而不是赋值运算符,即=。这是要使用的正确代码:

// A constructor that initializes the private data members
countyElectionList::countyElectionList(){
head = NULL;
}

我不得不怀疑你是否真的试图编译这段代码。我照做了,我的编译器立即向我指出了错误。它甚至告诉我该怎么做:

test.cpp(210):警告C4553:'==':运算符无效;你做了吗打算'='?

我还怀疑你有点过头了。我假设这是家庭作业,你没有做实际的选举制度(尽管…),所以我想我的下一个问题是:你有没有考虑过和你的教授谈谈,解释你在语言语法方面有困难?也许你的学校有资源可以帮助你。试图通过在文件中随机插入内容来编程对你的学习没有帮助;这是一种挫败感的锻炼。

首先,在countyElectionList的构造函数中,似乎从未将head初始化为NULL

当您稍后尝试使用head时,例如在countyElectionList::push_back中,这可能会导致问题。

相关内容

  • 没有找到相关文章

最新更新