[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]
[OSASK 3857] Re: BOARD: Re: malloc/free の動作
合著です。MLで失礼します。
[Re: <3d15f0ef_114ab.mone !Atmark! imasy.org>
written by mone !Atmark! imasy.org]
> はい、stdlib6bではそうなっています。このNULLは失敗という意味ではありま
>せん。アクセスされないことを確信しているポインタです。free()に対してNULL
>を与えることもでき、それは何も起こりません。
>
> K&Rでは、malloc(0)に対してNULLではないなんらかのポインタを返しメモリを
>消費します。そしてそれをfree()することで元に戻るようになっています。そっ
これはヤバイような気がします。NULL では失敗の場合と区別が付きません。
malloc はもちろん、realloc や strdup などは失敗の場合 NULL が
返ってくる筈です。エラーチェックが不可能です。
0 バイトを意図的に malloc するのは十分にあり得る話です。
こんな感じで 0 byte な時に例外処理をしないで処理できません。
ptr0 = malloc(src_len);
if (ptr0 == NULL) abort();
i = 0;
while(i < src_len) {
*(ptr0 + i) = hogehoge(*(src+i));
i++;
}
ptr1 = realloc(ptr0, add_len);
if (ptr1 == NULL) abort();
src_len == 0 な場合や add_len == malloc不可能 な場合や ptr0 == NULL で
realloc な場合を考える。
この様な場合、成功したのか、失敗したのかが不明になります。
>ちの方がいいのでしょうか?直すのは簡単です(0かどうかのチェックをしなけれ
>ばいいだけのことなので)。
将来的には直すべきかと思われます。
----
合著 (kattyo !Atmark! abk.nu)