2011-01-15 5 views
2

同様の質問hereがあります。2つのデータフィールドを持つ構造体の空きメモリ

私は以下の構造を有する:

struct SimpleXY 
{ 
    double x; 
    double y; 

}; 

struct SimpleEdge 
{ 
    SimpleXY first; 
    SimpleXY second; 
} 

    struct SimpleEdgeList 
    { 
      uint num_edges; 
      SimpleEdge *SimpleEdges; 
    }; 

SimpleEdgeListによってメモリ保持を解放する適切な方法は何ですか?これは私の現在のアプローチですが、手動でfirstsecondデータフィールドを解放する必要があるかどうかは疑問です。

void Free(SimpleEdgeList *myList) 
{ 

    free(myList->SimpleEdges); 
} 

これはC構造体であり、私はCのようなメモリ解放を探しています。

+0

これはリンクリストの実装になっていますか?もしそうなら、あなたは 'struct SimpleEdgeList {int num_xy; SimpleEdgeList * next; }; '、' Free() '関数はもう少し複雑になります。 –

+2

同じ名前のメンバで 'struct'を持つことは非常に混乱します。お願い、それはやめて。 –

+0

@Chris、リンクリストではありません。私の構造は正しい。しかし、明確化のためにメンバー名を編集します。 – Graviton

答えて

5

手動でフィールドを解放する必要はありません。 myList->SimpleEdgeListで参照されるメモリを解放すると、free()を呼び出すと、2つのフィールドを含むメモリブロック全体がクリーンアップされます。これらのフィールドには他のオブジェクトへのポインタが含まれていないため、メモリを再利用するためにそれらのフィールドに降下する必要はありません。

4

現在の方法は問題ありません。

単純なルールは、malloc()にはそれぞれ正確に1つのfree()が必要です。 malloc()が1つだけあるため、free()の1つが必要です。

関連する問題