2011-01-15 14 views
6
から復帰したときに、次の 些細コードは、セグメンテーションフォールトを生成し、なぜ私は思ってきた

メイン():セグメンテーションフォールト

//Produces "Error while dumping state (probably corrupted stack); Segmentation fault" 

#include <iostream> 
#include <fstream> 
#include <vector> 
using namespace std; 

class Test 
{ 
    vector<int> numbers; 
}; 

int main() 
{ 
    Test a; 
    ifstream infile; 

    cout << "Last statement..." << endl; // this gets executed 
    return 0; 
} 

興味深いことに、 1)2つの変数のうちの1つだけが宣言されている場合、私はエラーを受け取りません 2)ベ​​クターメンバーを持つオブジェクトの代わりにベクトル変数を宣言すれば、すべてうまくいっています 3) ifstreamの代わりにofstreamを宣言してください。もう一度、すべてうまく動作します。 この特定の組み合わせで何かが間違っているようです...

これはコンパイラのバグでしょうか? cygwinでgcc version 3.4.4を使用しています。

アドバイスをありがとうございます。

ガーボル

+8

gcc 3.4.4は古代です。あなたは4シリーズで試すことができますか? –

+0

私は似たようなバグレポートを見ていますが、私はそれを見つけることができないので、私は正確に覚えていません。しかし、私はこれが固定されているあいまいなバグだと確信しています。 – GManNickG

+0

来てください。私は3.0が芸術の状態だったときを覚えています。今gcc 2.95/2.96では、古くて変わったコンパイラがありました。私はちょうどグラムでプログラムをコンパイルしようとした –

答えて

4

これはバグです。これがあなたのプログラム全体であれば、絶対に間違っていることはありません。コンパイラまたは標準ライブラリのバグを発見しました。このコメントでお勧めしたように、4.xシリーズのgccコンパイラを試してみてください。 3.xシリーズは丘のように古いです。

+0

プロンプトの回答/コメントに感謝します。残念ながら、コンパイラのアップグレードはこの場合単純な問題ではありません。私は、Allegroのゲームライブラリに依存しているTscopeと呼ばれるCライブラリを使って、心理学実験を開発しています。 Tscopeにはcygwin環境、gccコンパイラ、基本IDEなどがあらかじめパッケージ化されています。問題はAllegroが最近のcygwinでもうコンパイルされないことです。そして、私はgcc.exeを置き換えるだけでうまくいくとは思わない。 –

+0

@GáborKovács - いいえ、それでは十分ではありません。しかし、Cygwinには、あなたが選択的にアップグレードできるパッケージシステムがあると私は信じています。だからあなたはそれを試すことができます。 – Omnifarious

関連する問題