Hoppo Geschrieben 8. März 2003 Geschrieben 8. März 2003 Hallo Leute. Ich hab ein Problem mit den Borland C++ Builder 6. Also ich hab mir ein Programm programmiert. Aber immer wenn ich es beenden will, schreit Borland auf: Project Text.exe raised exception class EInvalidPointer with message 'Invalid pointer operation'. und dann landet er beim Destruktor des MainForms. Bei der Zeile: /* TCustomForm.Destroy */ inline __fastcall virtual ~TForm(void) { } Könnt Ihr mir helfen?? Vielen Dank hoppo
SgtBadAzz Geschrieben 9. März 2003 Geschrieben 9. März 2003 Kenne zwar keinen C++ Builder aber scheint zu sein, dass im Destruktor von TCustomForm irgendwas mit einem Pointer gemacht wird, der nicht mehr gültig ist oder die Sache die mit dem Pointer gemacht wird ist nicht gültig. Frank
Hoppo Geschrieben 10. März 2003 Autor Geschrieben 10. März 2003 Keine Ahnung, ich finde den Destruktor nicht :confused: Aber der Fehler tritt nur auf wenn ich eine bestimmte Funktion aufrufe: TForm1::LoadVars() { bool exist = false; TStrings *Values = new TStringList(); String pw; char * temp; TRegistry *Reg = new TRegistry(KEY_READ); Reg->RootKey = HKEY_CURRENT_USER; Reg->OpenKey("Software\\ArenaLogin",1); Reg->GetValueNames(Values); if(Values->Count < 4) { Reg->CloseKey(); Reg->Access = KEY_READ | KEY_WRITE; Reg->OpenKey("Software\\ArenaLogin",1); } for(int i=0; i<Values->Count; i++) if(Values->operator [](i) == "Account") {exist = true; break; } if(!exist) Reg->WriteString("Account",""); exist = false; for(int i=0; i<Values->Count; i++) if(Values->operator [](i) == "Login") {exist = true; break; } if(!exist) Reg->WriteString("Login",""); exist = false; for(int i=0; i<Values->Count; i++) if(Values->operator [](i) == "Logout") {exist = true; break; } if(!exist) Reg->WriteInteger("Logout",20); exist = false; for(int i=0; i<Values->Count; i++) if(Values->operator [](i) == "Password") {exist = true; break; } if(!exist) Reg->WriteString("Password",""); EAccount->Text = Reg->ReadString("Account"); ELogoutTime->Text = Reg->ReadInteger("Logout"); pw = Reg->ReadString("Password"); temp = new char[pw.Length()]; ELoginTime->Text = Reg->ReadString("Login"); for(int i=0; i<pw.Length(); i++) { temp[i] = pw.operator [](i+1); temp[i]+= 47-i*i; } temp[pw.Length()] = 0; EPassword->Text = temp; delete Values; delete Reg; delete temp; } Wenn ich diese Funktion aufrufe klappt ja alles wunderbar, aber sobald ich versuche, das Programm zu beenden, erscheint die Fehlermeldung mit dem Pointer und er landet im Quellcode an der Stelle des Destruktors (an der Deklaration) Könnt ihr weiter helfen:confused: :confused: :confused:
Klotzkopp Geschrieben 10. März 2003 Geschrieben 10. März 2003 temp = new char[pw.Length()]; Du reservierst zuwenig Speicher für temp. Mit dieser Deklaration ist der höchste Index, auf den du zugreifen darfst, temp[pw.Length()-1]. Das muss aber nicht die Ursache des Problems sein.
SgtBadAzz Geschrieben 11. März 2003 Geschrieben 11. März 2003 Originally posted by Hoppo Keine Ahnung, ich finde den Destruktor nicht :confused: Aber der Fehler tritt nur auf wenn ich eine bestimmte Funktion aufrufe: TForm1::LoadVars() { bool exist = false; Wenn ich diese Funktion aufrufe klappt ja alles wunderbar, aber sobald ich versuche, das Programm zu beenden, erscheint die Fehlermeldung mit dem Pointer und er landet im Quellcode an der Stelle des Destruktors (an der Deklaration) Könnt ihr weiter helfen:confused: :confused: :confused: [/b] Das ist ja auch nicht der Destruktor. Und der wird eben aufgerufen wenn Instanzen von Klassen zerstört werden. Vorschlag: Lies doch mal ein Buch das dir die Grundzüge von C++ erklärt und vesuch nicht zu fliegen ohne laufen zu können. Gibt es in deinem Quellcode was , was aussieht wie eine Methode aber ein ~ im Namen hat ?? Frank
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden