大規模な構造を含むグローバル変数があるとします。
typedef struct {
char Big[1024]
} LARGE;
static LARGE x;
void main()
{
free(x);
}
free(x) が不要になったときに main から安全に呼び出すことはできますか?
いいえ。動的に割り当てx
ていないので、解放する必要はありません (解放することもできません)。
プログラムが終了する前に絶対にメモリを解放する必要がある場合は、ポインターをグローバルとして宣言し、必要に応じてmalloc
またはを使用して割り当て、構造体の操作が終了したときにcalloc
それを割り当てます。free
static LARGE* x;
void main()
{
x = malloc(sizeof(*x));
// use x
free(x);
}
いいえ、free
への呼び出しによって割り当てられたオブジェクトの割り当てを解除するためにのみ使用できますmalloc
。
静的ストレージ期間を持つオブジェクトは、プログラムの終了時にのみ割り当てを解除できます。