- ベストアンサー
c++ セグメントエラー
あるプログラムをつくっていて、コンパイルはできたのですが、セグメントエラーというランタイムエラーが取り除けません。 エラーの発生している行は特定できました。 その行は、以下のようなものです。 AAA aaa[4][64][4]; AAAは型名、aaaは配列名です。3次元配列の宣言でエラーが発生していました。 エラーの発生している行はこの行で、代入などを行っている部分ではありません。配列の大きさを考えてみても、メモリが足りなくなっているとは考えづらいのですが、他になにか原因はあるのでしょうか? 考えられる原因を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
セグメントエラーは、発生した行そのものに問題が無いケースもあります。 別の箇所の間違いが、発生箇所に影響しただけ、という可能性もあります。 AAAがclass,structなら、この宣言でデフォルトコンストラクタが呼ばれます。 そのコンストラクタに間違いがあれば、エラーになることがあります。 セグメントエラーの原因で多いのは次のようなものです。 ・NULLポインタの指す領域にアクセスした ・ポインタ変数を初期化してない不定な値のままにして、そのアドレスにアクセスした ・配列で確保した範囲外の添字を指定した これ以上は情報不足で回答できません
その他の回答 (3)
- uint32_t
- ベストアンサー率0% (0/1)
すみません。#3の8kBは8MBの間違いです。
- uint32_t
- ベストアンサー率0% (0/1)
メモリは足りていても、最大スタックサイズの制限(環境によるが8kBくらい)により、メモリ不足でエラーになることもあります。このサイズの変更の仕方はOSによります。aaaの領域をmallocやnewで確保するように変更してエラーにならないのであればこの理由が考えられます。
- Tacosan
- ベストアンサー率23% (3656/15482)
これだけ出されてもなぁ.... その AAA とかいう型がどう定義されているかもわからないし, この行がどのような関数の中にあるのか (あるいは関数の外にあるのか) もわからんし, とにかく考えるための情報が全然足りない.