• ベストアンサー

c++ セグメントエラー

あるプログラムをつくっていて、コンパイルはできたのですが、セグメントエラーというランタイムエラーが取り除けません。 エラーの発生している行は特定できました。 その行は、以下のようなものです。 AAA aaa[4][64][4]; AAAは型名、aaaは配列名です。3次元配列の宣言でエラーが発生していました。 エラーの発生している行はこの行で、代入などを行っている部分ではありません。配列の大きさを考えてみても、メモリが足りなくなっているとは考えづらいのですが、他になにか原因はあるのでしょうか? 考えられる原因を教えてください。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

セグメントエラーは、発生した行そのものに問題が無いケースもあります。 別の箇所の間違いが、発生箇所に影響しただけ、という可能性もあります。 AAAがclass,structなら、この宣言でデフォルトコンストラクタが呼ばれます。 そのコンストラクタに間違いがあれば、エラーになることがあります。 セグメントエラーの原因で多いのは次のようなものです。 ・NULLポインタの指す領域にアクセスした ・ポインタ変数を初期化してない不定な値のままにして、そのアドレスにアクセスした ・配列で確保した範囲外の添字を指定した これ以上は情報不足で回答できません

その他の回答 (3)

  • uint32_t
  • ベストアンサー率0% (0/1)
回答No.4

すみません。#3の8kBは8MBの間違いです。

  • uint32_t
  • ベストアンサー率0% (0/1)
回答No.3

メモリは足りていても、最大スタックサイズの制限(環境によるが8kBくらい)により、メモリ不足でエラーになることもあります。このサイズの変更の仕方はOSによります。aaaの領域をmallocやnewで確保するように変更してエラーにならないのであればこの理由が考えられます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

これだけ出されてもなぁ.... その AAA とかいう型がどう定義されているかもわからないし, この行がどのような関数の中にあるのか (あるいは関数の外にあるのか) もわからんし, とにかく考えるための情報が全然足りない.

関連するQ&A