Ich war ein einfaches C++ Programm mache CTable
mit - meiner eigenen Klasse. CTable
enthält einen Zeiger auf ein Array von int
, das mit Methoden CTable
geändert und bearbeitet werden kann.Programm stürzt ab mit der Meldung „rekursiv aufgerufen terminate“ ohne jede Ausnahme zu werfen
Hier ist ein kurzer Ausschnitt:
class CTable
{
private:
int *table; //pointer to the table
int length; //length of the table
///...etc
public:
int SetLength(int length); //returns -1 on failure
int SetValueAt(int index, int value); //returns -1 on failure
///...etc
CTable& operator+=(CTable &other) //combine 2 CTables together
{
int oldLength = length;
SetLength(length+other.GetLength());
for(int i=oldLength;i<length;i++)
{
SetValueAt(i,other.GetValueAt(i-oldLength));
}
return *this;
}
};
Ich habe auch eine andere Funktion, die ich verwende Benutzereingaben in Worte aufgeteilt:
vector<string>* splitString(string sentence, char delim)
{
vector<string> *res = new vector<string>();
stringstream ss;
ss.str(sentence);
string word;
while (getline(ss,word,delim))
{
res->push_back(word);
}
return res;
}
Es ist wichtig, hier vorgestellt zu beachten, dass alle Methoden scheinen um alleine gut zu funktionieren, dh wenn ich sie einzeln teste.
Wie Sie ich auch haben sehen können, überlastet die +=
Betreiber. Das Problem ist, dass wenn ich diesen Operator verwende, die nächste Benutzereingabe das Programm abstürzt, wenn die splitString()
Funktion aufgerufen wird. Das Programm stürzt ab mit der einzigen Fehlermeldung "beenden rekursiv aufgerufen". Es gibt keine Ausnahmen, nichts. Nur ein Fehlercode 0xC0000005
Ich kann Ihnen nicht den ganzen Code wirklich zeigen, weil das Programm ziemlich groß wurde, zZ ungefähr 1000 Linien des Codes. Ich versuche dieses Programm stundenlang zu reparieren und ich habe keine Ahnung, was los ist. Jede Hilfe wird sehr geschätzt!
sehe keinen Versuch catch Block, woher weißt du, dass es nicht wirft? übrigens. terminate() ist der Indikator, dass es wirft, aber Sie behandeln es nicht 'catch (...)' könnte Ihnen mit übersehenen Ausnahme-Typen helfen – deW1
Ich habe versucht, einen try-catch über die gesamte Hauptfunktion und es hat nichts gefangen. – AlanKalane
Sie bekommen wahrscheinlich ein unbestimmtes Verhalten. Es gibt nicht annähernd genug Code, um es zu diagnostizieren. Sie müssen den Code wahrscheinlich mit einem Debugger durchgehen, um ihn einzugrenzen. –