if(tmpPtr->number<tmpPtr->next_number->number)
{
int tmpV1=tmpPtr->next_number->number;
int tmpV2=tmpPtr->number;
tmpPtr->next_number->number=tmpV2;
tmpV2=tmpPtr->number=tmpV1;
}
到目前为止,这是我尝试过的方法,应该在每次添加成员时对链接列表进行排序。但是当编译器崩溃时,我尝试放入第二个节点。断点是if语句
if(tmpPtr->number<tmpPtr->next_number->number)
。我非常努力地找出问题所在,但无法解决。 最佳答案
您的问题是在第二次运行时,tmpPtr
指向您的第一个元素,该元素的next_number
值为NULL
。因此,一旦您尝试取消引用它,它将基本上将其自身简化为一个NULL
指针,该指针会导致一个SIGSEGV
。
第一次运行后
n->number = input
n->next_number = NULL
h = n
t = n
counter2 = 1
所以从第二个输入开始
n->number
n->next_number = NULL
tmpPtr = h // which is the previous n and therefor h->next_number = NULL
tmpPtr->next_number == NULL // this is your problem since you do not check if next_number is a valid pointer
更新:
如果在https://gist.github.com/sahne/c36e835e7c7dbb855076上上传了解决方案的(hackish)版本
关于c++ - C++程序崩溃的链表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15374123/