|
发表于 2002-11-26 14:31:36
|
显示全部楼层
呵呵,对不起!由于你的程序写法和我平时所见的不太一样,把我给搞糊涂了。
问题还是出在this指针的初始化上:
- void sortlist(void) /* 排序根据优先数num 二重 法*/
- {
- int i,j;
- this = head;
- for(i=1; i<=8; i++)
- for(j=i+1; j<=8; j++){
- if(this->num < this->next->num){ /*比较本结点和后一个结点num值的大小 */
- temp = this;
- this = this->next;
- this->next = temp;
- }
- this = this->next;
- }
- }
复制代码
在进入循环之后,当i=1时,进行j=2到8的内循环,这部分运行正常,但内循环结束后,this指针已经到了链队的末尾,再进行i=2的循环时,this->next将指向非法地址,此时出现Segmentation fault。
要改正这个错误,只要在循环中加上一句this=head就行了。
- for(i=1; i<=8; i++)
- [color=red]this=head;/*增加此句,保证每次循环开始时this指向链队头部。*/[/color]
- for(j=i+1; j<=8; j++){
- if(this->num < this->next->num){ /*比较本结点和后一个结点num值的大小 */
- temp = this;
- this = this->next;
- this->next = temp;
- }
- this = this->next;
- }
复制代码 |
|