> 2004/11/02 (火) 16:47:32 ◆ ▼ ◇ [mirai]> > なんか realloc() の直後の malloc() が
> > realloc() で引き延ばしたメモリ領域と
> > 同じ領域を割り当てるようなんだけどなんでかね
> > ちなみにコンパイラは gcc 3.3.3
> > int main (void) {
> > char *a, *b, *c, *d;
> > a = (char *)malloc( 10 );
> > b = (char *)malloc( 10 );
> > realloc(a, 20);
> > c = (char *)malloc( 10 );
> > d = (char *)malloc( 10 );
> > printf("a: %p\n", a);
> > printf("b: %p\n", b);
> > printf("c: %p\n", c);
> > printf("d: %p\n", d);
> > return( 0 );
> > }
> > ---- 出力結果
> > a: 0x804b030
> > b: 0x804b040
> > c: 0x804b030
> > d: 0x804b050
> > ----
> > a と c が同じになるので中身のデータが壊れて困ってるよ
> realloc()の使い方を間違えている
> 新しく確保した領域へのポインタを返すので
> a = realloc(a, 20);
> としなければならない
> もちろんメモリ不足でNULLを返す可能性もあるのでそれを調べるときは別のポインタ変数を使え
転載かよ(;´Д`)
aをただ上書きするとrealloc失敗の時に元のメモリ領域を永遠に開放できなくなるな
参考:2004/11/02(火)16時46分17秒