c ++程序崩溃链表?

时间:2013-03-12 23:17:17

标签: c++ linked-list

                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)。我很努力地弄清楚问题是什么,但不能。

2 个答案:

答案 0 :(得分:2)

您的问题是第二次运行时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)版本的解决方案

答案 1 :(得分:1)

对于第二个添加,h-&gt; next_number为NULL,因此在内部while循环的第一次迭代中,您取消引用NULL(h-&gt; next_number-&gt;数字的别名)。

修改
当你插入第二个项目时:
head == tail,so head-&gt; next == NULL。 你开始内循环:
head-&gt; number ==第一个插入的项目。
head-&gt; next == NULL。
head-&gt; next-&gt; number == dereferenced NULL。