を解放することができませんが、私はこのようなデータ構造を持っていますノード....C二重リンクリストノード
しかし、私はリストを消去する関数を書くとき、私はエラーを得た:
PhoneBook(6187,0x7fff77045000) malloc: *** error for object 0x7f87c1f00004: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
これは私の消しゴム機能である:
void freeTelephoneBookList(TelephoneBookList* aList) {
TelephoneBookNode* node;
TelephoneBookNode* temp = aList->head;
while (temp) {
node = temp;
temp = node->nextNode;
freeTelephoneBookNode(node);
}
free(aList);
}
void freeTelephoneBookNode(TelephoneBookNode * node) {
free(node->name);
free(node->telephone);
free(node);
}
私がここで間違っていることを教えてください。ありがとうございました!
に
freeTelephoneBookNode
機能を削減し、あなたは最初のノードの削除を考慮するために、ノードのアドレスを渡す必要があります。例えば'void freeTelephoneBookNode(TelephoneBookNode ** node)'です。すべてのnext/prevポインタをrewireしなければならず、最初のノードが削除された場合は、リストアドレスを新しい最初のノードに更新します。 –あなたが 'freeTelephoneBookList'に渡しているポインタ - どこから来たのですか? [最小限で完全で検証可能な例](https://stackoverflow.com/help/mcve)のためにここに必要なものがいくつかありますが、それは 'main()'で終わります。あなたが主張する失敗のポイントまであなたのコードを実行する必要があります。私たちは読者を気にするものではなく、私はあなたに「問題はありません」と主張していると思っています。 * "私が知っている..." *おそらくもっとそうだろう。編集:まあ、その機能はちょうど*完全に変更されたので、今は何も得られません。 – WhozCraig
@ DavidC.Rankinそうではありません。ノード内のnext/prevポインタ、またはリスト内の最初/最後のポインタが、ノードまたはリストオブジェクトが削除された瞬間にゼロになるかどうかは重要ではありません。次の/ prevノードを削除させます。そして彼らは。 – CiaPan