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/

10-11 18:45