Programmieren - alles kontrollieren 4.940 Themen, 20.676 Beiträge

Zeigerakrobatik: Warum stürzt das Programm ab?

Yves3 / 2 Antworten / Flachansicht Nickles

Hallo,
Mein Programm stürzt beim Freigen der Resourcen ab.
Für mich sieht aber eigentlich alles OK aus und ich kann den Fehler einfach nicht finden.

Hat jemand eine Idee?

Der entscheidende Programmteil:
WCHAR **_sz;
// Wenn keine variablen Strings vorhanden sind, dann muss der Zeiger auf einen leeren String zeigen,
// andernfalls stürzt die Funktion FormatMessage unter bestimmten Umständen ab
if(m_pevlr->NumStrings != 0)
_sz = (WCHAR**)malloc((m_pevlr->NumStrings)* sizeof(WCHAR*)+ ADDITIONAL_POINTERS * sizeof(WCHAR*));
else
_sz = 0;

if(uSize > 0) // Nur ausführen, wenn es einen variablen Teil gibt
{
memcpy(pwcDescription, (WCHAR*)((LPBYTE)m_pevlr + m_pevlr->StringOffset), uSize);

// Die einzelnen Strings, die im Speicher gefunden werden, auf ein zweidimmensionales Array aufteilen...
UINT uStringOffset = 0;
UINT uCounter = 0;
while(uCounter NumStrings)
{
wcout wcout _sz[uCounter] = (WCHAR*) malloc((wcslen((WCHAR *)(pwcDescription + uStringOffset)) + 1) * sizeof(WCHAR));
wcscpy(_sz[uCounter], (WCHAR *)(pwcDescription + uStringOffset));
uStringOffset += wcslen((WCHAR *)(pwcDescription + uStringOffset)) + 1;
uCounter++;
}
for(UINT i=uCounter; i {
_sz[i] = (WCHAR*) malloc(2*sizeof(WCHAR));
_sz[i] = L"";
}
}

if(uSize > 0) // In dem Fall wurde der Speicher alloziert
{
for(UINT i=0; iNumStrings)+ADDITIONAL_POINTERS); i++)
free(_sz[i]); // Stürtz beim ersten leeren String ab
free(_sz);
}

bei Antwort benachrichtigen
Borlander Yves3 „Zeigerakrobatik: Warum stürzt das Programm ab?“
Optionen
_sz = 0;
Das schaut für mich irgendwie nicht wie ein Zeiger auf einen leeren String aus, sofern an dieser Speicheradresse nicht gerade zufällig einer liegt...
bei Antwort benachrichtigen