私はそれを解放する方法を理解していますが、自分のコードで間違っているとはかなり確信しています。循環リンクリストをフリーにする
while(*bestFriend != NULL){
temptr = *bestFriend;
*bestFriend = (*bestFriend)->next;
free(temptr);
printf("Freed\n");
}
私のプログラムをクラッシュさせると、何が原因であるのか分かりません。
編集:コード
の残りint duckDuckBoot(jimmysFriend **bestFriend, int rounds, int howManyDucks, int numberOfFriends, int gameCounter){
int roundCounter;
int i;
jimmysFriend *temptr;
temptr = *bestFriend;
roundCounter = 0;
if(rounds != 0){
do{
for(i = 0; i < howManyDucks;){
i++;
if(i == howManyDucks){
temptr = temptr->next;
if((*bestFriend)->next == *bestFriend){
temptr = *bestFriend;
free(temptr);
*bestFriend = NULL;
printf("Game %d:\n", gameCounter);
printf("Jimmy has friends no more\n");
return 0;
}
else if(temptr->next == *bestFriend){
jimmysFriend *temptr2;
while(temptr->next->next != *bestFriend){
temptr = temptr->next;
}
temptr2 = temptr->next;
temptr->next = *bestFriend;
free(temptr2);
temptr = *bestFriend;
}
else if(temptr == *bestFriend){
jimmysFriend *temptr2;
temptr2 = *bestFriend;
while(temptr->next != *bestFriend){
temptr = temptr->next;
}
temptr->next = (*bestFriend)->next;
(*bestFriend) = (*bestFriend)->next;
free(temptr2);
}
else{
jimmysFriend* temptr2;
temptr2 = *bestFriend;
while(temptr2->next->next != temptr->next){
temptr2= temptr2->next;
}
jimmysFriend *temptr3;
temptr3 = temptr;
temptr2->next = temptr->next;
temptr = temptr->next;
temptr2 = NULL;
free(temptr3);
free(temptr2);
}
roundCounter++;
}
else{
temptr = temptr->next;
}
}
}while(roundCounter != rounds);
if(roundCounter == rounds){
char** nameList;
int listSize;
nameList = allocMemory(numberOfFriends);
listSize = dataTransfer(*bestFriend, nameList, numberOfFriends);
printf("Game %d:\n", gameCounter);
for(i = 0; i < listSize; i++){
printf("%s\n",nameList[i]);
}
for(i = 0; i < listSize; i++){
free(nameList[i]);
free(nameList);
}
while(*bestFriend != NULL){
temptr = *bestFriend;
*bestFriend = (*bestFriend)->next;
free(temptr);
printf("Freed\n");
}
}
}
return 1;
}
[最小限の完全で検証可能な例](https://stackoverflow.com/help/mcve)を表示してください。 – kaylum
現在のノードの次のノードが開始ノードのときに、開始したノードを保存して停止します。 – xaxxon
@kaylumあなたは自分のアウトプットか、それとも私のプログラムのほうがいいですか? – Jude