2

C にいくつかのリンクされた構造がある場合:

struct structA {
    int a;
    int b;
    struct structA *next;
}

struct structB {
    char a;
    int b;
    struct structB *next;
}

そして、次のようにメモリを動的に割り当てます。

struct structA *mystructA = (struct structA*) malloc(sizeof(struct structA));
mystructA->next = (struct structA*) malloc(sizeof(struct structA));

struct structB *mystructB = (struct structB*) malloc(sizeof(struct structB));
mystructB->next = (struct structB*) malloc(sizeof(struct structB));

次のように、構造体の種類ごとに常に解放する必要がありますか?

struct structA *p, *pNext;
for (p = mystructA; p != NULL; p = pNext) {
    pNext = p->next;
    free(p);
}

struct structB *p, *pNext;
for (p = mystructB; p != NULL; p = pNext) {
    pNext = p->next;
    free(p);
}

または一般的な解決策はありますか?free()プロシージャは解放する必要があるバイト数を知る必要があるため、他に解決策はないと思います。しかし、多分私は間違っていて、誰かが私にもっとよく教えてくれるでしょう。

4

3 に答える 3

2

実際、これは非常に興味深い質問です。一部のシステムでは、個別に-edされており、各メモリブロックがそのタイプ専用に割り当てられているため、free()structタイプに個別に対応する必要があることは事実です。また、一部のシステムではストレージサイズが異なりますが、次のようなソリューションを試すことができますフィリップが提供した。詳細については、ドゥーム メモリ エンジンについての記事を参照してください。ちなみに、 C でキャストしないでください。面白いのは、プログラムが終了すると、オペレーティング システムがメモリを再利用することです。そのため、プログラムの終わり近くで構造体の割り当てを解除するだけで、構造体が不要になったときに、それらの構造体の割り当てが不要になる場合があります。malloc()charintmalloc()free()

于 2013-07-19T13:07:08.680 に答える