ページ 1 / 1
二次配列の動的取得後のメモリ開放
Posted: 2011年9月03日(土) 21:02
by Cr
Crです
二次配列の動的取得をした後の開放の仕方が分かりません…
コード:
int d;
int i;
int **dis;
scanf("%d",&d);
dis = (int**)malloc(d);
for (i=0;i<d;i++){
*dis[i]=malloc(d);
}
このあとfreeを使って解放せねばならないことは分かるのですが、二次配列の場合どうやって開放すべきなんでしょうか?
どなたか分かる方いたら教えてください。
Re: 二次配列の動的取得後のメモリ開放
Posted: 2011年9月03日(土) 21:05
by box
確保したときとは逆の手順でfreeしてください。
ところで、
Cr さんが書きました:
コード:
dis = (int**)malloc(d);
*dis[i]=malloc(d);
この2行に
sizeof(int *)
とか
sizeof(int)
とかが登場しなくていいんでしょうか。
Re: 二次配列の動的取得後のメモリ開放
Posted: 2011年9月03日(土) 21:07
by Cr
えぇと逆というと、こんな感じですか?
コード:
for(i=0;i<d;i++){
free(*dis[i]);
}
free(**dis);
Re: 二次配列の動的取得後のメモリ開放
Posted: 2011年9月03日(土) 21:12
by Cr
sizeofの件、見逃してました…
エーっと…いるんでしたっけ?
半年ぶりぐらいにC言語を触るものでして…
やろうとしたらコンパイルの仕方すら忘れてて、文字入力→出力でコンパイルエラーが起きてしまったぐらいで…
どなたか分かる方いたら教えてくれませんか?
Re: 二次配列の動的取得後のメモリ開放
Posted: 2011年9月03日(土) 21:18
by box
Cr さんが書きました:sizeofの件、見逃してました…
エーっと…いるんでしたっけ?
仮に不要であるとして、dに具体的な値(例えば10)を入れた
コード:
dis = (int**)malloc(10);
*dis[i]=malloc(10);
がどういう意味を持つのか説明してみてください。
Re: 二次配列の動的取得後のメモリ開放
Posted: 2011年9月03日(土) 21:24
by Cr
えーと、disにint**型にキャストしたメモリを10入れる…
あぁそうか!
int**型はあくまでキャストですから取得要領は変わんないんですね
int型×10にしなきゃだめですね
すっかり忘れてました
ありがとうございます。
freeの方はあれでよろしかったでしょうか?
[/quote]
仮に不要であるとして、dに具体的な値(例えば10)を入れた
コード:
dis = (int**)malloc(10);
*dis[i]=malloc(10);
がどういう意味を持つのか説明してみてください。[/quote]
Re: 二次配列の動的取得後のメモリ開放
Posted: 2011年9月03日(土) 21:25
by box
Cr さんが書きました:
コード:
dis = (int**)malloc(d);
こうやって確保した領域をfreeするときのコードが、どうして
なのでしょうか。
dis(型はint **)
と
**dis(型はint)
とは、全く別物です。
Re: 二次配列の動的取得後のメモリ開放
Posted: 2011年9月03日(土) 21:32
by Cr
すいません、ありがとうございます
昔は普通にできたのに…
ホントダメになってるなぁ
コード:
for(i=0;i<d;i++){
free(*dis[i])
}
free(dis);
ですか
Re: 二次配列の動的取得後のメモリ開放
Posted: 2011年9月03日(土) 21:43
by Cr
返事がないという事は、あってるという事でいいのかな…?
ありがとうございました!