は、このプログラムを考えてみましょう:Cでクリーンアップを行う別の方法は?
int main(void)
{
int* i = malloc(sizeof(int));
int* j = malloc(sizeof(int));
}
malloc
が失敗し、ポインタがfree
D」ではありませんので、しかし、これは、単純なアプローチです。
だから、これを行うことができます。
int main(void)
{
int* i;
int* j;
if ((i = malloc(sizeof(int)) < 0)
{
return -1;
}
if ((j = malloc(sizeof(int)) < 0)
{
free(i);
return -1;
}
free(i);
free(j);
}
を、私はこの非常にエラーが発生しやすい考えるが。最後にmalloc
のエラーの場合は、ポインタを20個割り当てなければならないと考えると、free
の変数とreturn -1
が必要です。
私も、私はこのようにそれを書くために助けることができる、atexit
を知っている:優れている
int* i;
int* j;
void del_i(void)
{
free(i);
}
void del_j(void)
{
free(j);
}
int main(void)
{
if ((i = malloc(sizeof(int)) < 0)
{
return -1;
}
else
{
atexit(del_i);
}
if ((j = malloc(sizeof(int)) < 0)
{
return -1;
}
else
{
atexit(del_j);
}
}
が、私はグローバルとしてすべてのポインタを宣言する必要が嫌い。これら二つのアプローチを組み合わせることがいくつかの方法は基本的には、次のとおりです。
- を直接実行することができますいずれか、または
atexit
で使用するポインタ、のデストラクタを持ちます。 - 関数に対してローカルのポインタを持つ。
私はあなたのポイントを得ることはありません。あなたがプログラムの実行を終了/停止しているなら、なぜ 'free()'について気にしますか? –
1.常にポインタをフリーズしてください。 2.大きなプログラムの中でこれを考えてください – hgiesel
私に教えていただきありがとうございますが、私は私のバージョンに固執します。 :) –