[C++] Was bedeutet Schlechtes Ptr

Overloader

Cadet 4th Year
Registriert
Jan. 2004
Beiträge
91
Weiß einer von euch was schlechtes Ptr heißt? Bei mir kommt das zum Beispiel wenn ich im Debugmodus über value mit der Maus fahre.

Code:
const CString value (reinterpret_cast<char *> (buffer));

Das sieht dann folgendermaßen aus: value = {0xcccccccc <Schlechtes Ptr>}
Hab keine Ahnung was die Abkürzung Ptr heißt.
 
Re: C++ Was bedeutet Schlechtes Ptr

pointer = zeiger ? is zwar grammatikalisch nicht so astrein, aber evtl ist die übersetzung schlecht ;)
 
Re: C++ Was bedeutet Schlechtes Ptr

Das klingt mir mal nach "Bad Pointer". Bedeutet, dass der Zeiger auf einen ungültigen Speicherbereich zeigt.


OT:
grammatikalisch ist grammatisch aber auch nicht so astrein :D
 
Re: C++ Was bedeutet Schlechtes Ptr

OK und was kann man da jetzt tun? Wie soll ich ihn denn dann auf einen gültigen Speicherbereich zeigen lassen? Das kapier ich irgendwie nicht ganz. :D

Danke für die Hinweiße.
 
Re: C++ Was bedeutet Schlechtes Ptr

Das heißt in Deinem Beispiel wohl, dass in buffer wohl etwas ungültiges steht. Woher kommt denn buffer in Deinem Beispiel?
 
Re: C++ Was bedeutet Schlechtes Ptr

Ich lese Daten aus der Registrierungsdatenbank und zwar mit

Code:
LONG RegQueryValueEx(    HKEY hKey,    LPCTSTR lpValueName,    LPDWORD lpReserved,   
 LPDWORD lpType,    LPBYTE lpData,    LPDWORD lpcbData  );

und buffer ist lpData. Und das hier steht in der Hilfe dazu:

[out] Pointer to a buffer that receives the value's data. This parameter can be NULL if the data is not required.

So hab ich die Variable buffer deklariert: unsigned char *buffer;
Die größe des Wertes den ich auslese bestimme ich so: buffer = (unsigned char *)malloc(dwLen);

In buffer kann doch garnichts ungültiges stehen, da der wert doch richtig ausgelesen wird! Der Compiler bringt ja auch keinen Fehler! Ich wüsste jetzt nicht wie ich das anders regeln könnte.
 
Re: C++ Was bedeutet Schlechtes Ptr

Also ich weiß jetzt nicht, wie Du das machst.

Du musst zuerst für lpData Speicher anfordern, z.B. 100 Bytes und dann den Buffer an die Funktion übergeben. Außerdem musst Du die Adresse einer Variable, die die Größe des Buffers enthält, an die Funktion übergeben. Falls der Aufruf fehlschlägt, weil der Platz nicht reicht, wird in der übergebenen Variable für die Größe die benötigte Größe stehen.

Beispielaufruf:

Code:
unsigned char *buffer = new unsigned char [1024];
DWORD size = 1024;

const unsigned res = RegQueryValueEx (..., ..., NULL, buffer, &size); // anstatt ... natürlich irgendwas konkretes hinschreiben ;)

if (res == ERROR_SUCCESS)
{
  // Aufruf erfolgreich
}
else
{
  // Irgendwas ist schiefgegangen
}
 
Zuletzt bearbeitet: (Berichtigung :-))
Re: C++ Was bedeutet Schlechtes Ptr

Das funktioniert trotzdem nicht ganz, das mit dem schlechten Ptr ist immernoch da. Ich musste den Code verändern, weil der Compiler sonst einen Fehler gebracht hat.

Code:
unsigned char *buffer = new unsigned char [1024];
DWORD size;

Mal sehen, vielleicht komm ich noch dahinter. Trotzdem Danke.
 
Re: C++ Was bedeutet Schlechtes Ptr

Ups, ja natürlich new unsigned char. :)

Wenn, dann muss es aber DWORD size = 1024 heißen. Es ist wichtig, dass size auch schon vorher die Größe des Puffers hat.
 
Zurück
Oben