int i;
char *str;
scanf("%d",&i);
str = (char *)malloc(sizeof(char) * i);
printf("%d",sizeof(str));
これを実行してiに100 と代入しているのですが、
結果は4になります。
これでいいのですか?
メモリの動的確保について
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: メモリの動的確保について
mallocしたサイズを調べる方法をC言語は提供しておりません。
自分で確保したんだから自分で覚えておきなさいという設計思想です。
sizeof()は基本的の静的なサイズを調べるためのものです。
自分で確保したんだから自分で覚えておきなさいという設計思想です。
sizeof()は基本的の静的なサイズを調べるためのものです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: メモリの動的確保について
なるほど。
今回はmallocの戻り値がNULLかチェックしてませんが、
実際にNULLでなかったから100バイト分の領域は確保できている(半角英数字であれば100文字分)と
考えていいのですか?
もし、領域を別の値に変更したいときは
free()で1度解放してから、またmallocすればいいのですか?
今回はmallocの戻り値がNULLかチェックしてませんが、
実際にNULLでなかったから100バイト分の領域は確保できている(半角英数字であれば100文字分)と
考えていいのですか?
もし、領域を別の値に変更したいときは
free()で1度解放してから、またmallocすればいいのですか?
Re: メモリの動的確保について
はい、NULLでなければ領域は確保されています。
メモリ自体の確保が済めばfreeするまで自由に書き換えられますから、値を変更するごとにfreeする必要はないですよ。
メモリ自体の確保が済めばfreeするまで自由に書き換えられますから、値を変更するごとにfreeする必要はないですよ。
ζ*'ヮ')ζプログラミングはみんなで奏でるシンフォニー
Re: メモリの動的確保について
大は小を兼ねますので小さい領域が必要な場合はそのまま使い回しでも問題ありません。きみまろ さんが書きました:なるほど。
もし、領域を別の値に変更したいときは
free()で1度解放してから、またmallocすればいいのですか?
サイズ変更する場合、reallocという便利な関数があります。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: メモリの動的確保について
100バイトに100文字入れたら文字列の終端文字であるナル文字が入れれませんよ。
文字列として処理しないなら良いですが。
文字列として処理しないなら良いですが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: メモリの動的確保について
みなさん、ありがとうございます。
とても勉強になりました。
今まで大量のデータを扱うときは
無駄に
str[1000]としていました。
最近になって便利なmallocを知ったのですが、
イマイチ理解出来なくて。。。
今後、活用していきたいと思います。
とても勉強になりました。
今まで大量のデータを扱うときは
無駄に
str[1000]としていました。
最近になって便利なmallocを知ったのですが、
イマイチ理解出来なくて。。。
今後、活用していきたいと思います。