Encounter Knot 800

タイトルとかけ離れたモチベーションで華麗(※注 決して早い訳ではない)な更新頻度を発揮するかもしれない趣味的ブログ?

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告 |

スタックオーバーフロー

下記のようなプログラムを書いていて、

#include
#define N 250

int main()
{
  double a[N][N];
  (以下略)
}

define のところでNの値を2500にすると、エラーで落ちていた。(コンパイルはできた)
Nの値を小さめにすると問題ないので、メモリ関係でなにかなっているとは思ったが、mallocとかを使えば問題ないのではないかと思い、が、面倒なので利用せず、ググってたら、

スタックオーバーフロー

だったようです。研究室仲間も101×101の二次元配列を大量に宣言してたら落ちてたようで、これに該当してたようだ。 VisualStudioは標準で1MBらしい。

250×250のdoubleだと、(doubleを64ビットとする)
250×250×64÷8=500000
500000÷1024=約488KBなので辛うじてセーフだが、

2500×2500だと、100倍になるので約4.88MB……こりゃオーバーするわww

で、解決方法は、main文の外に書いてやると良いそうです。(グローバル変数扱い?)

上のプログラムを書き換えるとこうね。
#include
#define N 2500

double a[N][N];

int main()
{
  (以下略)
}

エラー吐かなくなりましたw
別の研究室の先生に解決法聞いたっていう。
プログラム的なもの | コメント:2 | トラックバック:0 |
<<Kasperskyの相性発覚? | HOME | Rarrrrrrrrrryyyyyyyyyyyy>>

この記事のコメント

CやJavaで使った事のあるような文字列があったりなかったり。

まだまだ分からん事の方が多い(-ω-)
2009-07-12 Sun 23:31 | URL | 詠人不知 [ 編集]
プログラムはたいていCで書いてます。

が、

#defineと二次元配列くらいは使ったことあるでしょ!?
2009-07-14 Tue 16:47 | URL | アペルジオ [ 編集]

コメントの投稿















コメント非公開の場合はチェック

この記事のトラックバック

| HOME |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。