1

関数でリンクされたリストを作成しました。プログラムの残りの部分では、ポインターを使用してリストにアクセスしています。では、プログラムの最後でこの連結リストを解放するにはどうすればよいでしょうか? 単純に使用するfree(CircuitData)か、それとも各ノードを解放するリストを実行する必要がありますか? これを書いている私は、各ノードを解放することが明らかな答えだと思っています...

余談ですが、プログラム中に割り当てられたすべてのメモリが適切に解放されているかどうかを確認する方法もお尋ねしたいと思いますか?

 ListNodeType *CircuitData;
 CircuitData = NULL;
 ReadFile(&CircuitData, &numEl, &numNodes);


void ReadFile(ListNodeType **CircuitData, int *numEl, int *numNodes){

    ListNodeType *newPtr, *tempPtr;
    newPtr = malloc(sizeof(ListNodeType));
    *CircuitData = newPtr;
    newPtr->nextPtr = NULL;

    //MORE CODE
4

4 に答える 4

6

私は次のようなことを考えます:

struct node
{
    int data;
    node* next;
} *head;

void deleteAllNodes(node* start)
{
    while (start != NULL)
    { 
        node* temp = start; 
        start = start -> next;
        free(temp);
    }
}
于 2013-10-21T23:52:19.267 に答える
2

最初の質問については、はい、リストとfree各ノードをたどる必要があります。

2 番目の質問は、答えるのが少し難しいです。メモリ内にオブジェクトがあり、それにアクセスする方法がない場合、それはメモリ リークです。

メモリ プールの分析に使用できるツールがあります。valgrind をチェックしてください:

http://valgrind.org/

于 2013-10-21T21:38:19.963 に答える