-2
每當我運行此循環時,在循環的第二次迭代中出現分段錯誤。在排序鏈表時出現分段錯誤
node *new,*new1;
new=(node*) malloc(sizeof(node));
new1=(node*) malloc(sizeof(node));
new = start->next;
for(;new->next != NULL;new = new->next)
{
for(new1=new->next;new1 != NULL;new1=new1->next)
{ //printf("LOOP\n");
if(new->data > new1->data)
{
printf("\n Swapping - new:%d and new1:%d\n",new->data,new1->data);
temp = (node*) malloc(sizeof(node));
temp1 = (node*) malloc(sizeof(node));
temp1 = new->next;
temp = new1->next;
new->next = temp;
printf("Temp var : %d\n",temp->data);
printf("Temp1 var : %d\n",temp1->data);
new1->next = new;
new1 = new;
new = temp1;
printf("After swapping , new:%d and new1 : %d\n",new->data,new1->data);
// free(temp);
// free(temp1);
}
}
}
每當我給它一個列表 - 例如, 4,1,9,6 它只交換4和1,當它是迭代交換9和6時,它顯示和分段錯誤。
我建議您花些時間閱讀[如何調試小程序](https://ericlippert.com/2014/03/05/how-to-debug-small-programs /),並學習如何使用調試器來捕獲像這樣的崩潰。這至少可以幫助你找到崩潰發生的代碼。下一步是在調試器中逐行執行代碼,找出*爲什麼會發生。最有可能是你沒有正確更新的指針,或者根本沒有初始化。 –
可能是不相關的,但是你泄漏內存('temp'和'temp1'有兩個'malloc') – UnholySheep
說到指針,'new = start-> next;'會導致內存泄漏。你首先讓'new'指向某個內存,然後你指向某個* other *內存,失去原來的指針。我也推薦你閱讀[這個老問題和它的答案],(關於'malloc'的結果的投射)(http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc)。 –