二次配列の動的取得後のメモリ開放

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Cr

二次配列の動的取得後のメモリ開放

#1

投稿記事 by Cr » 14年前

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を使って解放せねばならないことは分かるのですが、二次配列の場合どうやって開放すべきなんでしょうか?
どなたか分かる方いたら教えてください。

box
記事: 2002
登録日時: 15年前

Re: 二次配列の動的取得後のメモリ開放

#2

投稿記事 by box » 14年前

確保したときとは逆の手順でfreeしてください。
ところで、
Cr さんが書きました:

コード:

dis = (int**)malloc(d);
       *dis[i]=malloc(d);
この2行に
sizeof(int *)
とか
sizeof(int)
とかが登場しなくていいんでしょうか。
最後に編集したユーザー box on 2011年9月03日(土) 21:08 [ 編集 1 回目 ]
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

Cr

Re: 二次配列の動的取得後のメモリ開放

#3

投稿記事 by Cr » 14年前

えぇと逆というと、こんな感じですか?

コード:


for(i=0;i<d;i++){
        free(*dis[i]);
}

free(**dis);


Cr

Re: 二次配列の動的取得後のメモリ開放

#4

投稿記事 by Cr » 14年前

sizeofの件、見逃してました…
エーっと…いるんでしたっけ?
半年ぶりぐらいにC言語を触るものでして…
やろうとしたらコンパイルの仕方すら忘れてて、文字入力→出力でコンパイルエラーが起きてしまったぐらいで…
どなたか分かる方いたら教えてくれませんか?

box
記事: 2002
登録日時: 15年前

Re: 二次配列の動的取得後のメモリ開放

#5

投稿記事 by box » 14年前

Cr さんが書きました:sizeofの件、見逃してました…
エーっと…いるんでしたっけ?
仮に不要であるとして、dに具体的な値(例えば10)を入れた

コード:

dis = (int**)malloc(10);
       *dis[i]=malloc(10);
がどういう意味を持つのか説明してみてください。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

Cr

Re: 二次配列の動的取得後のメモリ開放

#6

投稿記事 by Cr » 14年前

えーと、disにint**型にキャストしたメモリを10入れる…
あぁそうか!
int**型はあくまでキャストですから取得要領は変わんないんですね
int型×10にしなきゃだめですね
すっかり忘れてました
ありがとうございます。
freeの方はあれでよろしかったでしょうか?
[/quote]
仮に不要であるとして、dに具体的な値(例えば10)を入れた

コード:

dis = (int**)malloc(10);
       *dis[i]=malloc(10);
がどういう意味を持つのか説明してみてください。[/quote]

box
記事: 2002
登録日時: 15年前

Re: 二次配列の動的取得後のメモリ開放

#7

投稿記事 by box » 14年前

Cr さんが書きました:

コード:

dis = (int**)malloc(d);
こうやって確保した領域をfreeするときのコードが、どうして
Cr さんが書きました:

コード:

free(**dis);
なのでしょうか。
dis(型はint **)

**dis(型はint)
とは、全く別物です。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

Cr

Re: 二次配列の動的取得後のメモリ開放

#8

投稿記事 by Cr » 14年前

すいません、ありがとうございます
昔は普通にできたのに…
ホントダメになってるなぁ

コード:

for(i=0;i<d;i++){
       free(*dis[i])
}
free(dis);
ですか

Cr

Re: 二次配列の動的取得後のメモリ開放

#9

投稿記事 by Cr » 14年前

返事がないという事は、あってるという事でいいのかな…?
ありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る