2016-07-16 9 views
0

Ich habe dieses Stück Code (etwas, das ich zusammen einen seltsamen Fehler in einem Schachprogramm zu isolieren warf versuche Ich versuche zu schreiben):Warum gibt Cout Ausgabe Backslashes und Ziffern aus, wenn ich es wieder verwende?

#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; 
} 

Und der Ausgang ist C\367\367

Die erste std::cout << (*emptyLine[0]).COLOUR; gibt immer "C" aus (das erwartete Ergebnis). Aber wenn es erneut verwendet wird, gibt es diesen Backslash und drei Ziffern aus, die sich ändern, je nachdem, wie oft ich cout im Programm verwende.

Antwort

1

Sie haben ein undefiniertes Verhalten, weil Sie die Adresse einer lokalen Variablen null verwenden, die zerstört wird, sobald Ihre Funktion makeEmptyLine() zurückkehrt.

Beklagt sich Ihr Compiler, wenn Sie versuchen, ihn mit der höchsten Warnstufe zu kompilieren?

Verwandte Themen