- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:メモリ動的確保について)
メモリ動的確保とは?確認してみましょう
このQ&Aのポイント
- メモリの動的確保について説明します。ソースコードの一部を引用しながら、malloc関数の使い方やsizeof演算子の違いについて解説します。
- malloc関数の後ろの引数で、sizeof(struct DATA)と5の違いについて疑問を持っています。sizeof(struct DATA)はメモリのサイズを計算し、5は動的に最大5までメモリを確保することを示しています。
- また、動的に確保したメモリに対してmemset関数で初期化しましたが、実行エラーが発生しました。動的に確保したメモリに対してmemset関数を使用することはできません。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
★アドバイス ・『sizeof(struct DATA)』は、構造体『struct DATA』の1個分のサイズのことです。 ・『5』は、最大5個ではなく、5 バイトだけ確保することになります。→サイズが足りません。危険です。 ・よって、5個分のメモリを確保する場合は、『sizeof(struct DATA) * 5』と掛け算をします。 ・動的確保したメモリでも、『memset』は使えますが、サイズ指定を気をつけましょう。 ・つまり、memset( person, '\0', (sizeof(struct DATA) * 5) ); とするのです。掛け算をするのですよ。 補足: ・2通りともコンパイル・エラーにはなりません。ただし、実行したときに『ハングアップ』しますよ。 ・両方とも文法エラーではないためエラーにならないのですよ。でも、『5』の場合は正常に実行できません。 ・とにかく『malloc』は指定バイト数の動的確保ですので、配列の場合は『型』のサイズと配列の個数を 掛け算したバイト数を指定するわけです。→例:int型の10コの配列は、sizeof(int) * 10 と指定するわけだ。 ・『memset』のサイズ指定も同じで掛け算したバイト数を指定します。 ・分かりますか? ・以上、おわり。
お礼
お返事ありがとうございます。 なんて分かりやすい説明でしょう。 本当にありがとうございます。 今callocとreallocも調べています。 もし、使い方に疑問とかあやまりとかありましたら、またご指導いただけたらうれしです。 少し調べてからわからなかったらお尋ねします。 ありがとうございました。