Fragen zu char*
-
Hi,
char* Name; Name = strdup("1234567890"); cout << Name << "\n"; delete Name;char* Name; Name = new char(11); sprintf(Name, "1234567890"); cout << Name << "\n"; delete Name;Warum funktioniert Version 1 tadellos und Version 2 nicht? Bei Version 2 stürzt bei mir ab einer bestimmten Stringlänge das Programm ab. Außerdem stürzt es beim delete immer ab.
Und noch was,
muss esdelete Name;oder
delete[] Name;heißen?
Vielen Dank im Voraus!

-
Im zweiten Fall legst Du ein (nur eins) neues char an und initialisierst es mit 11.
Das array legt man an mit new char[11];. Die korrekte Freigabe lautet dann: delete [] Name.
-
Danke,
schon wieder etwas Neues gelernt...
-
Und im ersten Beispiel müsstest du den Pointer vernünftigerweise per free() freigeben (man: strdup stammt aus C-Zeiten und nutzt deshalb höchstwahrscheinlich malloc() zur Speicheranforderung).
-
"Höchstwahrscheinlich" ist gut.
strdup ist schlichtweg kein Standard, deshalb sollte man das in C++ auch nicht verwenden. Und eine String Klasse ist sowieso eleganter.