Frage zur dynamischen Speicherallokation
-
Daniel E. schrieb:
strdup ist keine Funktion von Standard-C, das wirst Du schon in der Doku nachschlagen müssen. Es ist aber ziemlich wahrscheinlich, daß Du den Speicher selbst mit free aufräumen mußt.
ja, du musst den Speicher selber freigeben man: strdup(3)
man strdup schrieb:
The strdup() function allocates sufficient memory for a copy of the
string s, does the copy, and returns a pointer to it. The pointer may
subsequently be used as an argument to the function free(3).
-
supertux schrieb:
Daniel E. schrieb:
strdup ist keine Funktion von Standard-C, das wirst Du schon in der Doku nachschlagen müssen. Es ist aber ziemlich wahrscheinlich, daß Du den Speicher selbst mit free aufräumen mußt.
ja, du musst den Speicher selber freigeben man: strdup(3)
Das macht eine Aussage über strdup auf deinem System (wo strdup vermutlich nach POSIX genormt ist). Wie kommst Du darauf, daß das überall so zu sein habe?
-
Daniel E. schrieb:
supertux schrieb:
ja, du musst den Speicher selber freigeben man: strdup(3)
Das macht eine Aussage über strdup auf deinem System (wo strdup vermutlich nach POSIX genormt ist). Wie kommst Du darauf, daß das überall so zu sein habe?
Wie sonst? C hat keinen Garbage Collector.
-
Das ist zwar hoffnungslos OT aber eine Implementierung über alloca&Co. ist vorstellbar und bereits realisiert, wie man an strdupa aus der glibc sieht. HTH
-
Daniel E. schrieb:
Das ist zwar hoffnungslos OT aber eine Implementierung über alloca&Co. ist vorstellbar und bereits realisiert, wie man an strdupa aus der glibc sieht. HTH
Ganz toll. Ein lokales Array macht mehr Sinn.
-
Wieso ein lokales Array mehr Sinn macht als ein lokales Array will sich mir nicht erschließen.
-
Daniel E. schrieb:
Wieso ein lokales Array mehr Sinn macht als ein lokales Array will sich mir nicht erschließen.
Ebend. alloca ist Quatsch.
-
Unfug, alloca ist ziemlich sinnvoll aber leider nicht in ISO-C vorhanden; nur die Kücke mit dem 'type array[foo()]' ist drin.
Was willst Du uns überhaupt sagen? Daß die Funktion nicht funktioniert, oder daß es keine Anwendungsbereiche dafür gibt, sich einen temporären String zu holen?
-
Daniel E. schrieb:
Was willst Du uns überhaupt sagen?
alloca ist überflüssig. Man kann genauso gut ein lokales Array mit genügend Platz deklarieren. alloca eröffnet Hackern neue Möglichkeiten.
-
also Daniel E. hat schon recht.
es gib sehr alte C-biliotheken in denen strdup() die kopie mit alloca() erstellt oder sogar in einem globalen array. bei der methode mit dem globalen array kann man nur von einem string gleichzeitig eine kopie erstellen. bei der alloca() methode gehen beliebig viele, allerdings sind die nach rückkehr aus der funktion, die strdup() aufgerufen hat, alle wieder futsch.
diese alten methoden sind halt weniger flexibel. aber dafür sehr effizient
PS: alloca() ist natürlich KEIN quatsch! mit alloca() kannst du die größe auch zur laufzeit berechnen, wie es für strdup() nötig ist. da muß der speicher ja so groß sein wie der string. mit array-deklaration geht die größenberechnung zur laufzeit nur bei SEHR wenigen compilern (etwa GNU-C).