Guybrush Threepwood Geschrieben 10. Juni 2003 Geschrieben 10. Juni 2003 Hi, ich hab in einer Dll zwei Klassen (Klasse1 und Klasse2). In Klasse2 habe ich eine private Variable: Klasse1 **lpRows; Im Konstruktor wird lpRows auf NULL gesetzt. Danach rufe ich eine Methode der Klasse auf die lpRows weder benutzt noch verändert, lpRows bleibt also auf NULL. Im Destruktor soll lpRows mit delete[] wieder gelöscht werden, wenn es ungleich NULL ist. Wenn jetzt aber der Destruktor von Klasse2 aufgerufen wird, hat lpRows plötzlich den Wert 0xfffffff und ich bekomme bei delete[] eine Access Violation. :confused: Ich hoffe mir kann einer helfen. Gruß Guybrush
ITSE Geschrieben 10. Juni 2003 Geschrieben 10. Juni 2003 versuche halt mit dem Debugger (ich hoffe du hast VC++) jeden Schritt durchzuklicken und gleichzeitig die Pointer-Variable zu beobachten... Dann siehst du bestimmt wann die Variable den Wert ändert...
Guybrush Threepwood Geschrieben 12. Juni 2003 Autor Geschrieben 12. Juni 2003 Original geschrieben von ITSE versuche halt mit dem Debugger (ich hoffe du hast VC++) jeden Schritt durchzuklicken und gleichzeitig die Pointer-Variable zu beobachten... Dann siehst du bestimmt wann die Variable den Wert ändert... Das hab ich ja gemacht, und sie ändert sich nicht. Zeig mal bitte den Destruktor Da wird nur die Variable gelöscht wenn sie nicht NULL ist: OLEDB::~OLEDB() { if (lpRows != NULL) delete[] lpRows; } [/PHP]
Klotzkopp Geschrieben 12. Juni 2003 Geschrieben 12. Juni 2003 Nur am Rande: Da delete bei einem Nullzeiger nichts bewirkt, kannst du dir das if sparen. Zum eigentlichen Problem: Hat die Klasse noch andere Member, womöglich Arrays? Du könntest auch einen Watchpoint auf den Zeiger setzen, so dass dein Programm beim Debuggen anhält, sobald der Zeiger verändert wird. Ob und wie das geht, hängt vom benutzten Debugger ab.
Guybrush Threepwood Geschrieben 12. Juni 2003 Autor Geschrieben 12. Juni 2003 Original geschrieben von Klotzkopp Nur am Rande: Da delete bei einem Nullzeiger nichts bewirkt, kannst du dir das if sparen. Ich dachte dann tritt auch eine Accessviolation auf. Zum eigentlichen Problem: Hat die Klasse noch andere Member, womöglich Arrays? Das sind alle Variablen: IDataInitialize* pIDataInit; IDBInitialize* pIDBInitialize; IRowset* pIRowset; LPDSTR **lpRows; int nAnzRows, nAnzCols; char cDelimiter; bool bInit; Du könntest auch einen Watchpoint auf den Zeiger setzen, so dass dein Programm beim Debuggen anhält, sobald der Zeiger verändert wird. Ob und wie das geht, hängt vom benutzten Debugger ab. Ich benutze den Debugger von Visual C++6.0
Knuddlbaer Geschrieben 12. Juni 2003 Geschrieben 12. Juni 2003 Mit welchem Compiler hast Du gearbeitet ? Wenns nen VC6 VC7 oder Borland 6 ist, schick das PRojekt mal per mail. Interessiert mich das problem )
Klotzkopp Geschrieben 12. Juni 2003 Geschrieben 12. Juni 2003 Original geschrieben von Guybrush Threepwood Ich benutze den Debugger von Visual C++6.0 Da kannst du mit Strg-B auf dem Reiter "Data" solche Breakpoints setzen. Gib als Ausdruck deinen Zeiger an, und als Länge 4.
Knuddlbaer Geschrieben 12. Juni 2003 Geschrieben 12. Juni 2003 LPDSTR -> wie ist der definiert ? Hört sich an als könnte es DSTR * sein. Das würde dann DSTR *** lpRows geben. Ist es das was Du beabsichtigst ?
Guybrush Threepwood Geschrieben 12. Juni 2003 Autor Geschrieben 12. Juni 2003 Original geschrieben von Klotzkopp Da kannst du mit Strg-B auf dem Reiter "Data" solche Breakpoints setzen. Gib als Ausdruck deinen Zeiger an, und als Länge 4. Was muß ich denn da bei den weiteren Optionen angeben? Weil beim debuggen bekomme ich immer die Meldung das ein Haltepunkt nicht gesetzt werden konnte. LPDSTR ist meine andere Klasse.
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