dポイントプレゼントキャンペーン実施中!

最近、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でメモリを確保したらいいのでしょうか?
ソースを載せることができなく申し訳ないですが、よろしくお願いします。

A 回答 (3件)

gccではコンパイルが通ってしまうんですねぇこれで。


char配列だとしても(10^4)^2≒(2^10)^2*100、つまり100MB弱程度の配列が二つ分で200MB弱ものスタックを使おうとしています。
そりゃ普通は確保できずにコケますよね。
本当にそれだけの配列が必要なのかを見直すか、malloc()を使いましょう。

この回答への補足

ありがとうございます。
これから、malloc()の勉強をします。

補足日時:2009/01/31 18:28
    • good
    • 0

> ターゲットとは何でしょうか?



という質問が出てくる時点でstaticとかmallocを使っても問題が出そうなターゲットではないような気がします。
簡単にいうと「実行ファイルを動かす環境(ハード・ソフト)」のことで、たとえば組み込み用マイコンではRAMが1MBないなんて環境もあり100MBの領域はどうやっても取れません。
#2で言われているのは、そういうことです。
    • good
    • 0

GCCといってもターゲットが不明ですね。


ターゲット次第では、自動記憶域にしようが、静的記憶域にしようが、割付け記憶域(malloc)にしようが、それほど事情は変わりません。

この回答への補足

すみません、ターゲットとは何でしょうか?
今、(10000×10000)の行列を作るために二次元の配列を使用しようとしています。

補足日時:2009/01/31 20:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!