Ich habe ein sehr irritierendes Problem beim Ausführen einer C++ - Anwendung. Ich verwende den pgcpp-Compiler auf dem Interix-Subsystem von Windows XP. Mein Problem ist im Wesentlichen hier beschrieben:C++ - Anwendung stürzt beim Instanziieren eines Ofstream-Objekts ab.
Ich habe eine Klassendefinition in einer Header-Datei. Diese Header-Datei ist in einer Quelldatei enthalten. Diese Klasse hat zwei Konstruktoren und wird im Grunde verwendet, um einen Logger zu implementieren. Der erste Konstruktor verwendet ostream * als Argument, während der zweite überladene Konstruktor einen Dateinamen und einen booleschen Standardwert false verwendet. Das Ziel dieses zweiten Konstruktors besteht darin, einen Stream für den übergebenen Dateinamen zu erhalten und mit der Protokollierung von Nachrichten zu beginnen. Der Code in der Konstrukteurs ist wie folgt:
MessageLogger::MessageLogger(std::ostream *out): p_out (out), p_ofstream (0)
{
if (p_out)
{
(*p_out) << "Started logging messages" << endl;
}
}
MessageLogger::MessageLogger (char const *filename, bool append_to_file) : p_out (0), p_ofstream (0)
{
if (append_to_file)
{
p_ofstream = new std::ofstream (filename, ios::app);
}
else
{
p_ofstream = new std::ofstream (filename);
}
p_out = p_ofstream;
if (p_out)
{
(*p_out) << "Started logging messages" << endl;
}
}
Wo die Erklärungen von p_out und p_ofstream sind wie folgt:
std::ostream *p_out;
std::ofstream *p_ofstream;
unsigned int p_indent_level;
die alle drei oben genannten sind private Mitglieder. Die Instanziierung der Klasse Message erfolgt wie:
MessageLogger logger ("filename");
Bitte beachten Sie, dass append_to_file einen Standardwert false hat. PGDBG
ist auch schlecht benehmend. Ich bin unerklärlich in der Lage zu treten, wenn das Steuerelement bei p_ofstream = new std::ofstream (filename);
ist und es in einen zufälligen Speicherort tritt, und dann stürzt die Anwendung ab.
Auch wenn ich versuche, entweder gemischten oder Zerlegen Code in PGDBG, der Debugger stürzt ab mit der Meldung zu sehen:
jpgdbg parse: Newline must follow cmd in 'eleq "0" struct MessageLogger *Mes
sageLogger::MessageLogger(struct basic_ostream *out); (TranslatorGeneric.cpp
)
'
jpgdbg jpgdbgFileSelector processMsg: Warning unexpected msg token 5
jpgdbg parse: Newline must follow cmd in 'eleq "1" struct MessageLogger *Mes
sageLogger::MessageLogger(char *filename, unsigned char append_to_file); (Tr
anslatorGeneric.cpp)
'
jpgdbg jpgdbgFileSelector processMsg: Warning unexpected msg token 5
Ich bin nicht in der Lage dies in einem Beispielprogramm zu reproduzieren, wo ich genau das gleiche tat Ding wie oben aber alles funktioniert gut. Kann jemand bitte erklären, was passiert und ob es eine Lösung gibt?
Danke, Aditya.
In Ihrem Code hat 'append_to_file' keinen Standardwert. –
Ist Ihre Frage zur Anwendung oder zum Debugger? In beiden Fällen: Was genau fragen Sie? –
Die Frage bezieht sich auf die Anwendung, die fehlschlägt. Der Debugger ist nur ein zusätzliches Problem, das ich habe, das ich teilen sollte. Die Datei append_to_file wird auf false gesetzt. Es tut mir leid, dass ich den gesamten Code nicht gezeigt habe. – Aditya