2016-04-22 12 views
-1

文字列を取得するベクトルの中に文字列変数があります。ベクトル内の文字列変数が大量のエラーを引き起こす(WinMainCRTStartup)

#include <vector> 
#include <string> 
using namespace std; 

vector <string> buffer; 

main(int argc, char *argv[]){ 
    buffer[0] = "foobar"; 
    return 0; 
} 

それはで始まるこの巨大なコマンドラインコンパイラエラーが発生します。

のWinMainCRTStartupの複数の定義...

その後エラーが支離滅裂なものの約500行を続行します。 このコンパイラ(GNUコンパイラ)で他のC++プログラムをコンパイルできました。なぜこの特定のプログラムがエラーを引き起こしているのかわかりません。

+0

完全なエラーをトレースします。 –

+1

どのようにプログラムをビルドしますか?どのようにあなたのプロジェクトを設定しましたか?どのIDEを使用していますか?どのバージョン?コンパイラは何ですか? –

+1

また、ベクターは配列と似ていません。ベクターを作成するとベクターは空になり、その中のインデックスは範囲外になり、*未定義の動作*になります。 –

答えて

0

2つの問題があります。まず、戻り値の型をmainに追加する必要があります。

int main() { 
    ... 
} 

秒。空のバッファがあるので、buffer [0] = "anything"を実行しているときに、メモリが破損します(後で別の関数が破損したオブジェクトにアクセスするときに検出される可能性があります)。これは、演算子[]がベクトルに対してチェックされていないために発生しました。

int main() { 
    buffer.at(0) = "foobar"; 
    return 0; 
} 

あなたは例外として表示されます。

+2

コンパイル時にエラーがどのように説明されますか? –

+0

@ハリー・ジョンストン良い点! :)コンパイル時には、main()...の代わりにint main()を追加するだけです。 –

関連する問題