同じところでMALLOC、FREEをしたいのですが

[戻る]
Shimada 2002/10/14(月) 14:12:16
MALLOC A
MALLOC B
MALLOC C
MALLOC D

とする場合、
使ったメモリを開放する場合は

FREE(D)
FREE(C)
FREE(B)
FREE(A)
の順番でいいのでしょうか?
もし、順番を狂わせるとどんなことが起きるのでしょうか?

beginner 2002/10/14(月) 16:05:12
割り当てたA,B,C,Dが何らかの関係を持っていいたら
別ですが、互いに無関係なら順番は気にしなくても
いいと思います。

試しに実験してみたらどうです?

Shimada 2002/10/14(月) 16:35:58
そうですか?
ありがとうございます。

static    *float A;
とか
static    *int B;

とするとfreeをしても、
その配列の中身は保存されているのでしょうか?
それとも、やはり残念ながら消えてしまうものなのでしょうか?

beginner 2002/10/14(月) 17:47:09
static宣言して確保される領域は宣言した部分だけだと思います。
ので

static *float A;

ならfloat型のポインタ分のsizeof(float *)のみです。

繰返すようですが、これくらいなら実験したほうが早いですよ。
その上で分からないことがあれば質問するのがこの手の掲示板の
上手な?利用法だと思います。

ku 2002/10/15(火) 00:18:06
まず宣言のしかたが間違ってるみたいだけど
コンパイルでwarningでてません?
> static    *float A;
> static    *int B;

ちなみにcかc++の質問で
MALLOC Aというのはp = malloc(?);で
FREE (A)というのはfree(p);なんだよね?

ヒープの関係でたまたま前の情報が残っている事もあるし
残ってない事もありうる
でもfree(p);を実行したあとに*pをアクセスしてはいけません

> それとも、やはり残念ながら消えてしまうものなのでしょうか?
残念ながらではなくfree(p);とした時点で破棄してくれと
Shimadaさん自身が命令しているんですよ
その後もアクセスしたければ、free()を呼ぶタイミングを
変更しなければなりません

古いスレッドには追加発言できません。