私はCでリンクリストの実装を行っています。プログラムはファイルからファイルからデータを読み取り、それをリンクリストに入れ、いくつかのものを出力してから、リンクリストを削除してメモリを解放します。次に valgrind を実行すると、ファイルにメモリ リークがあることがわかります。ファイルを処理するための私のコードは次のとおりです。
while(fgets(line, sizeof line, file) != NULL){
theData = (ElementStructs*) malloc(sizeof(ElementStructs));
token = strtok(line, " \t\n");
strcpy((theData->word), token);
AddToBackOfLinkedList(theList, theData);
}
/* Do some printing here */
fclose(file);
DestroyLinkedList(theList);
もちろん、私が目にする問題は、データ トークンごとに新しいメモリ ブロックを割り当てていることです。ただし、DestroyLinkedList() 関数で割り当てられたメモリ ブロックを解放していると確信しています。DestroyLinkedList() 関数のコードは次のとおりです。
void DestroyLinkedList(LinkedLists *ListPtr){
LinkedListNodes* curNode = ListPtr->FrontPtr;
LinkedListNodes* nextNode = curNode->Next;
while(curNode != NULL){
free(curNode);
curNode = nextNode;
if(curNode!=NULL){
nextNode = curNode->Next;
}
}
}
リスト ノードに割り当てられたメモリを解放する方法に問題はありますか?