以下は、Cでのスタック構造体の実装です。既存のスタックを破棄し、ヒープに割り当てられているメモリを解放するために、関数(メソッドではない)を作成する必要があります。dispose(stack * s)関数は、破棄されるスタックへのポインターを受け取ります。
typedef struct {
int allocatedLength;
int logicalLength;
int elementSize;
void *elems;
} stack;
次のようにdispose()関数を実装すると、一部のメモリが解放されなくなりますか?
void dispose (stack *s) {
free (s->elems);
}
上記の実装では、ヒープ上にさえない、elemsに割り当てられたメモリのみを解放しています。elemsは何かへのポインタであることを覚えておく必要があります。ポインタに割り当てられたメモリを解放するのではなく、何かを解放するべきではありませんか?