导致分段错误的C ++链接列表

时间:2012-12-05 01:36:58

标签: c++ segmentation-fault

我的代码在下面,当我尝试通过我的程序“loadFile”时出现问题。它询问我的文件名,当我给它一个可以找到的文件名时,它只是说“Segmentation Fault”并停止运行。我认为问题要么来自loadFile方法本身,要么来自第244行,这就是我正在编写将元素添加到链表的方法。任何帮助表示赞赏!感谢。

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);
}

    }

2 个答案:

答案 0 :(得分:2)

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

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

}

您永远不会将countyElectionList::head初始化为NULL,因此当您致电countyElectionList::push_back时,head的值很可能指向NULL但是知道谁知道 - 什么......因此崩溃。

供将来参考:如果发生崩溃的函数看起来不可疑并且您无法找到源代码的错误并逐步执行逻辑,那么当您调试崩溃时,您应该继续检查函数的调用者。

更新:因此,在检查了新的pastebin代码(仍然无法编译,因为几个声称返回值的函数缺少return语句)之后,错误继续在同一个函数中:< / p>

// 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:'==':运算符无效;你是否   打算'='?

我也怀疑你在你的头上。我假设这是家庭作业而你没有做一个真正的选举制度(虽然...... )所以我想我的下一个问题是:你考虑过与你的教授交谈并解释你是如何做的语言的语法有困难吗?也许你的学校有资源可以提供帮助。尝试通过在文件中随机插入内容进行编程并不能帮助您学习;这是一种令人沮丧的运动。

答案 1 :(得分:0)

嗯,首先,您似乎永远不会在head的构造函数中将NULL初始化为countyElectionList

以后尝试使用head时可能会出现问题,例如在countyElectionList::push_back