Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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...

Zeig mal bitte den Destruktor

  • Autor
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]

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.

  • Autor
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

Mit welchem Compiler hast Du gearbeitet ?

Wenns nen VC6 VC7 oder Borland 6 ist, schick das PRojekt mal per mail. Interessiert mich das problem :o)

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 ?

  • Autor
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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.