dynamische speicherverwaltung bei arrays

Biergamasda

Erfahrenes Mitglied
hallo

ich habe ein kleines Problem bei einem meiner Progs
Ich lese mit der dir funktion den Inhalt eines verzeichnisses aus. Ordner in diesem Ordner werden mit [Ordnername] angezeigt. Mein Ziel ist es jetzt, die eckigen Klammer wegzubekommen. Ich hab das jetzt mal so probiert, jedoch erhalte ich dann immer irgendwelche sonderzeichen am ende des neuen Namens
ich hoffe mir kann jemand helfen, danke schon mal im Voraus...

Code:
void Cmp3_Search1Dlg::OnLbnDblclkList1()

{

char *array;

UpdateData(true);

array = strdup(m_strList.GetBuffer(1));

if(array[0] == '[')

{

for(int i=0; i < strlen(array)-1; i++)

array[i] = array[i+1];

array = (char*)realloc(array,(strlen(array)-2) * sizeof(char));

m_strEdit.Format(array);

}

else

WinExec("explorer " + m_strEdit + "\\" + m_strList,SW_NORMAL);



UpdateData(false);

}

MFG Masda
 
Das sieht ja schrecklich aus, benutz doch den CString, dann ersparst du dir die Speicherlecks (du hast hier nirgends ein free auf den Speicherbereich, den du von strdup erhältst (bzw. der von realloc erweitert wird).

Abgesehen davon, realloc füllt den zusätzlichen Speicher nicht mit 0 oder irgendeinem anderen Wert. Das musst du selbst erledigen. Deshalb siehst du da irgendwelchen Müll, der gerade an der Adresse zu finden war.
 
ok, ich versuchs mal mit der CString Klasse - muss mal schauen wie das da geht aber gut

das witzige hierbei ist nur, dass ich den Speicherbereich nicht größer, sondern kleiner mache, demnach dürfte dahinter nichts mehr stehen - sofern ich jetz nicht komplett daneben bin. Nachdem der Speicherbereich um 2byte reduziert wurde muss ich theoretisch kein Free mehr machen, da die letzen zwei bytes "weggeschnitten" werden

MFG
 
Zurück