- ベストアンサー
C言語 メモリ?
最近、C言語の勉強を始めているものです。 gccでコンパイルし、実行ファイルを実行すると 強制終了 と表示されます。 gdbで実行してみると、 Program terminated with signal SIGKILL, Killed. The program no longer exists. You can't do that without a process to debug. と表示されました。 プログラムの中で、二次元配列 a[10000][10000],b[10000][10000] というような大きい配列を使っているのが原因なのかなと思っていますが、どうなんでしょうか?mallocでメモリを確保したらいいのでしょうか? ソースを載せることができなく申し訳ないですが、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
gccではコンパイルが通ってしまうんですねぇこれで。 char配列だとしても(10^4)^2≒(2^10)^2*100、つまり100MB弱程度の配列が二つ分で200MB弱ものスタックを使おうとしています。 そりゃ普通は確保できずにコケますよね。 本当にそれだけの配列が必要なのかを見直すか、malloc()を使いましょう。
その他の回答 (2)
- D-Matsu
- ベストアンサー率45% (1080/2394)
> ターゲットとは何でしょうか? という質問が出てくる時点でstaticとかmallocを使っても問題が出そうなターゲットではないような気がします。 簡単にいうと「実行ファイルを動かす環境(ハード・ソフト)」のことで、たとえば組み込み用マイコンではRAMが1MBないなんて環境もあり100MBの領域はどうやっても取れません。 #2で言われているのは、そういうことです。
- jacta
- ベストアンサー率26% (845/3158)
GCCといってもターゲットが不明ですね。 ターゲット次第では、自動記憶域にしようが、静的記憶域にしようが、割付け記憶域(malloc)にしようが、それほど事情は変わりません。
補足
すみません、ターゲットとは何でしょうか? 今、(10000×10000)の行列を作るために二次元の配列を使用しようとしています。
補足
ありがとうございます。 これから、malloc()の勉強をします。