• ベストアンサー

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

  • セグメントエラー

    Cプログラムを実行した時に発生する、セグメントエラー は何が原因なのでしょうか? コンパイルはちゃんとととっているのに、 なぜエラーがでるのでしょうか? C言語の本を見たのですが、 のってません。 お願いします。

  • C#の構造体に関して

    C#の構造体に関して C#で構造体で配列を持ちたいと思い、宣言の仕方や使い方を 勉強していますが、どうしてもコンパイルは通るもののエラーと なってしまいます。 《ソース》 単純に構造体で宣言した"a"という配列に、"ABC"という文字列を 代入したいだけですが。。。 namespace テスト環境 { struct test { public string []a; } class Program { static void Main(string[] args) { test aaa = new test(); aaa.a[0] = "ABC"; } } } 配列の初期化等は、ようやく理解したつもりではいますが、構造体 が絡むとどうしてもわかりません。 どこをどのように修正したら良いかを教えて下さい。 初歩的な質問で申し訳ありませんが、よろしくお願いします。

  • FORTRAN: WIN SalfordFTN77 → LINUX g77 (セグメントエラー)

    今まで、Salford FTN77 を使用していたのですが、 この度、LINUXのg77でプログラムを動かすことになりました。 Salford FTN77で正常に動作していたのですが、g77では、実行時に「セグメント違反」が発生してしまいます。 現在わかっていることを列挙しますと… ・Salford FTN77では、問題なく動作する ・g77で、コンパイルまでは成功する ・Salford FTN77からの書き換えはおそらく成功(同種のプログラムで確認済み) ・プログラムをループ(=50)させているのですが、特定のループ回数(=13)でセグメントエラーになる。 ・エラー前の計算は正しく行われている ・ループ回数(=10)を引き下げると実行可能になる ・ループ毎にファイルのcloseも行っている ・スタックを限界まで引き上げて実行したが、同様のエラーが発生 ・特定のループ回数(=13)から、ある特定の変数(ここでは b)を、表示(write( , ) b )もしくは代入(a=b)しようとするとエラーが発生する。 ・エラーが発生する直前までは、ある特定の変数(b)は正しく出力でき、値に異常もない。 元々、簡単な数値計算をおこなう程度にしかプログラムを扱っていない生粋の初心者です。 ネットでセグメントエラーについて検索し、手当たり次第試してみたのですが、うまくいかず困っています。 ソースは公開できないのですが、何か心当たりのある方は、回答していただけると嬉しいです。 よろしくお願いします。

  • C言語のコンパイルエラー

    次のようなコードで (宣言等は省略します) extern int main( int argc, char *argv[]) { short ret ; ret = aaa(); } static short aaa() { /* aaa()関数の処理 */ XXXXXXXXX return 1; } というようなコードをコンパイルすると ワーニングで warning: 'aaa' was declared implicitly `extern' and later `static' warning: previous declaration of `aaa' warning: type mismatch with previous implicit declaration というようなメッセージが出ます。 これは、他のソースをまねて作ってるのですが、 参考にしたコードもこのような宣言の仕方になっているのにエラーはでまでん。 何か他にもaaaという関数の定義をしなくてはいけないのでしょうか? どうもstatic宣言とexternのところがよくわかりません。 宜しくお願いします。

  • SymantecNortonInternetSecurityのランタイムエラー

    Symantec社のNortonInternetSecurity2004をインストールしています。 特定のウェブサイトにアクセスすると以下のようなエラーメッセージが出ます。 「ランタイムエラーが発生しました。デバッグしますか?行:2XX エラー:'SymRealWinOpen'は宣言されていません。」 特定のウェブサイトは複数です。 なぜこのような問題が発生するのでしょうか?また解決策はありますか?

  • 共用体の配列 [C言語]

    今C言語のプログラムを組んでいたのですが、共用体の配列あるわけないと思いつつ共用体の配列を宣言したソースをコンパイルして見ました。そしたら普通にコンパイルできてしまったんです。びっくりしてその配列に値を代入したのですが、それはコンパイルエラーが出ました。共用体の配列なんてあるのでしょうか?回答よろしくお願いします。

  • ランタイムエラーが出てしまいます

    初心者ですので宜しくお願いします。 XP使用。 Macro media Flash をインストールしようとしましたが、 ランタイムエラーが発生しました。デバッグしますか。 行:434 エラー:Browser Perscription は宣言されていません。   と出てしまいます。 又URLをクリックする時、時々ランタイムエラーが出て 行:214 エラー:識別子がありません。 と出てきます。 処置の仕方が分かりませんので、ぜひお教え頂きたく宜しくお願いします。

  • IEのエラーについて

    IEであるページを開いた時に、エラーが表示されることがあります。 「ランタイムエラーが発生しました。デバッグしますか? 行:233 エラー:"ValueBanner"は宣言されていません。」 というエラーはどういうエラーなのでしょうか? いいえを押すと普通に戻るんですが、どうしてこのエラーが出るのか?出ても大丈夫なものなのか、教えていただけないでしょうか。 よろしくお願いします。

  • 定義されているのにエラーになる

    閲覧ありがとうございます。 C言語のプログラムの話です。 ソースファイルaaa.cでstdio.hをincludeしています。 stdio.hには extern FILE _iob[_NIOBRW]; というのが定義されているにも関わらず、 コンパイルすると、 aaa.o:aaa.c:(.data+0x58): undefined reference to '_iob' というエラーが出ます。 aaa.cでは_iobに関する宣言はしていませんが、それを使うこともしていません。 ヘッダファイルでexternで宣言してるからかなと思い、ソースファイルにexternなしの宣言を書き足したら、コンパイルは通りました。 今回は元々既にあるプロジェクトの改修だったのですが、宣言を消したりしていません。 しかし、その部分は元々ヘッダファイルに宣言などしなくてもコンパイルが通ってました。 昔はヘッダファイルでexternで宣言してたらソースファイルではしなくてオッケーみたいな感じだったんですかね? 私自身、あまりよく分かってなくて文章もめちゃくちゃですみません。 不足している情報があればできる範囲でお伝えしますので、ご協力よろしくお願いいたします。

  • ランタイムエラーというエラーが出るのですが・・

    コンニチハ。 パソコンでインターネットにつなげている時に『ランタイムエラー』というエラーが出るのですが、どのような対処をすればいいのでしょうか? 分かる方いらっしゃいましたら御願いします。 ※よくこのエラーが起こるのは「教えて!goo」でお礼を締め切るときや、それから質問ページに戻るときです。もちろん他のインターネットのページでも起こります。 ※最近になってよくこのエラーが出ます。 ☆例えばのようなエラーです(教えてgooより)  ランタイムエラーが発生しました。  デバックしますか?  行396  エラー:'google_ads'は宣言されていません。  はい(Y)   いいえ(N)