Zum Inhalt springen

Mysteriöse Wertzuweisung


Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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]

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...