これは私が昨日投稿した問題の続きですが、解決したと思っていましたが、ループとその終了条件を繰り返す方法に遭遇しました。新しい質問スレッドがより適切かもしれないと感じました。最後のノードでリンクリストをクラッシュさせる
次のfreeAllListMembers()関数は、 "temp"を解放しようとしているのでループの最後の反復まで機能しているようですが、tempは既に解放されています。それはもう一度走っているから、私が試したことはすべて動作していないようです。いくつかの小さなヒューマンエラーを取り除くために与えられた例をクリーンアップ任意の洞察力
int main() {
struct node *head = NULL;
createList(&head);
//do stuff with list
freeAllListMembers(&head);
return 0;
}
int createList(struct node **head) {
struct node *newNode= NULL;
for(int I = 0; I < 100; I++)
{
struct node *node = (struct node*)malloc(sizeof(struct node));
node->data = someData;
node->next = NULL;
//if we havent created an initial start node, create it
if (*head == NULL)
{
*head = node;
}
//otherwise, navigate to the end of the list to add a new node
else
{
newNode = *head;
while (newNode->next != NULL){
newNode = newNode->next;
}
newNode->next = node;
}
}
return 0;
}
void freeAllListMembers(struct node **head){
struct node *temp;
while (*head != NULL) {
temp = *head;
*head = (*head)->next;
free(temp);
}
return;
}
た失われたことを推測することができます走りましたwhile(* head!= NULL) – merl
@merl OPは*ポインタ*を実際のヘッドに渡していることに注意してください。 –
'createList' someを記入してください。チェーンが正しく終了しない可能性があります – infixed