2016-07-16 7 views
0

私は、コードのこの作品(私は一緒に私が書くしようとしているチェスプログラムに奇妙なエラーを分離しようとして投げた何か)を持つ:もう一度使うと、coutはバックスラッシュと数字を出力していますか?

#include <vector> 
#include <iostream> 

class piece{ 
public: 
piece() : COLOUR('C'){} 
const char COLOUR; 
}; 

std::vector<piece*> makeEmptyLine(){ 
std::vector<piece*> emptyLine; 
piece null; 
emptyLine.push_back(&null); 
return emptyLine; 
} 

int main(){ 
std::vector<piece*> emptyLine = makeEmptyLine(); 
std::cout << (*emptyLine[0]).COLOUR; 
std::cout << (*emptyLine[0]).COLOUR; 
std::cout << (*emptyLine[0]).COLOUR; 
return 0; 
} 

を、出力がC\367\367

最初std::cout << (*emptyLine[0]).COLOUR;です常に "C"(期待される結果)を出力します。しかし、それが再び使用されると、バックスラッシュと3桁の数字が出力されます。これは、プログラムで何回使用したかによって変化します。

答えて

1

ローカル変数nullのアドレスを使用すると、関数makeEmptyLine()が返されたときに破棄されるため、未定義の動作が発生します。

最高の警告レベルでコンパイルしようとするとコンパイラーは苦情を受けますか?

関連する問題