• ベストアンサー

多次元配列のデータ個数やメモリについて

今,2次元配列で, static double g[20000][10] として,配列を使用することを考えています。(他にも一次元配列を多くあります)これを使って計算を行います。 g[20000][9]の場合は正常に動いたんですが,g[20000][10]にするとaccess violation(アクセス違反)のように出ます。メモリの問題でしょうか,それとも限界なんでしょうか,,,,? この解決策はありますか?よろしくお願いします。 Visual C++6.0 で動作

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

  • ベストアンサー
noname#227064
noname#227064
回答No.1

何故数学カテゴリで質問したのかは置いといて、 access violationがでるなら、ソースコードに間違いがあるのではというのが一番考えられることです。 g[20000][9]のときは正常に動いたのではなく、たまたまうまくいっただけで、それがg[20000][10]のときに表面化しただけではないでしょうか。 「double g[20000][10]」のサイズは、 sizeof(double)*20000*10 = 8*20000*10 = 1.52MByte (ただしsizeof(double)=8の場合) なのでメモリの限界ではないでしょう。 ソースコードが出せるのなら、それを見て問題を指摘できるかもしれません。

s034089
質問者

お礼

ありがとうございます。 今日検討した結果うごきました。

その他の回答 (2)

  • R_Earl
  • ベストアンサー率55% (473/849)
回答No.3

ANo.2ですが、2箇所訂正です。 (誤) g[20000][10]で確保されるのは、g[0][0] ~ g[19999][9]までではないでしょうか? (正) 『static double g[20000][10]』というコードで確保されるのは、 g[0][0] ~ g[19999][9]までではないでしょうか? (誤) 2次元配列でも同様に、g[n][m]で確保されるのはg[0][0] ~ g[n-1][m-1]の 合計nm個だけだったと思います。 (正) 2次元配列でも同様に、『static double g[n][m]』というコードで確保されるのは g[0][0] ~ g[n-1][m-1]の合計nm個だけだったと思います。 ちなみにn、mはプログラムにおける変数ではなく、整数(の代わりに使った文字式)です。

  • R_Earl
  • ベストアンサー率55% (473/849)
回答No.2

g[20000][10]で確保されるのは、g[0][0] ~ g[19999][9]までではないでしょうか? int temp[5] という宣言で確保されるのは、 temp[0]、temp[1]、temp[2]、temp[3]、temp[4]の5つです。 2次元配列でも同様に、g[n][m]で確保されるのはg[0][0] ~ g[n-1][m-1]の 合計nm個だけだったと思います。

関連するQ&A