• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:c++ 構造体がメモリを食いすぎている?)

C++構造体のメモリ消費量についての疑問

このQ&Aのポイント
  • C++の構造体を使用しているプログラムで、メモリ消費量の問題が発生しています。具体的な環境やプログラムの一部を示し、現象を説明しています。
  • 実行時に異常終了が発生している場合や、コンパイルエラーが発生していないにも関わらずプログラムが正常に実行されない場合があることについて言及しています。
  • MAXの値を変更することで異常終了の発生有無が変わることを確認しており、メモリ消費量が原因である可能性があることを示唆しています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

1.5メガバイトもの領域をローカル変数に取るのだから、 コンパイラあるいは実行環境によってはトラブルを起こしかねません。 ローカル変数に許されたスタック領域は数MBに満たない処理系が少なくありません。 mallocを使ってヒープから領域を確保すればもっとたくさん使えます。

peace_jt
質問者

お礼

mallocを使って、試したところ期待通りの動作をしました。 メモリなどを扱うようなプログラミングはあまりしたことがなく、なぜmalloc関数があるの?などと疑問に思っていました。 今回、このような問題に直面して初めてこの関数の、またメモリの確保というのが大事だということがわかりました。 非常に勉強になりました。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • racene
  • ベストアンサー率70% (21/30)
回答No.3

スタック領域が不足しているのかもしれません。 mallocを使うとどうなるでしょうか?

peace_jt
質問者

お礼

回答ありがとうございます。 さっそく使ってみたいと思います。

すると、全ての回答が全文表示されます。
  • MAXIMAX
  • ベストアンサー率60% (50/83)
回答No.2

なによりも 1 台目はコンパイラ/デバッガを動かすにはメモリが少なすぎると思うので、2台目でデバッグしてみたほうがいいと思いますよ。それから、どちらのでもいいので同じバイナリを双方のPCで動かしてみたほうがいいです。コンパイラが変わればコンパイル結果に相違がでますので。 プログラムだけ見ても、エラーの内容やエラーが出ている場所がわからないと、なかなか推測もできないですよ。

peace_jt
質問者

お礼

回答ありがとうございます。 今、メインで使ってるPC(2台目)は実家に帰っていて、使えない状態です。回答時は使えたのですが・・・ すいません。

すると、全ての回答が全文表示されます。
回答No.1

sizeof(FolderInfo) の値はいくつになりますか? そのサイズをもった構造体をいくつ確保していますか?

peace_jt
質問者

お礼

早速の回答ありがとうございます。 ---------------------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 100 typedef struct{ ________char author[128]; ________char title[MAX/4][128]; ________int valuation[MAX/4]; ________char path[MAX/4][512]; ________int sigData;//有効な(タイトルの)データ数 }FolderInfo; int main(void) { ________unsigned int size; ________size = (unsigned int)sizeof(FolderInfo); ________printf("%d\n", size); ________return 0; } ---------------------------------- として、調べた結果、出力は 16232 となりました。 また、本来のソースコードは下のように続くので、 FolderInfoの確保数はMAXの100ということでいいのでしょうか? ------------------------------------------------ #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 100 typedef struct{ ________char author[128]; ________char title[MAX/4][128]; ________int valuation[MAX/4]; ________char path[MAX/4][512]; ________int sigData;//有効な(タイトルの)データ数 }FolderInfo; int main(void) { ________FolderInfo FI[MAX]; ------------------------------------------------

peace_jt
質問者

補足

ちなみに、以下のはすべて1台目のPCで確認しました。

すると、全ての回答が全文表示されます。

関連するQ&A