Wann gibt alloca den Speicher frei?
-
angenommen ich hab sowas, wird dann nach dem schließen der klammer der speicher schon wieder freigegeben, oder bezieht sich das nur auf variablen
void xy(){ char *x; { x = alloca(123); if(!x) return; } //ist *x noch gültig? }
axo ja, und was ist damit? das geht nicht, oder
void xy(){ char *x; { char xyz[123]; x = xyz; } //ist *x noch gültig? }
bin bischen eingerostet, helft mir mal bitte auf die sprünge
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89 und C99) in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Im ersteren Fall ist es schwer zu sagen; die Funktion alloca ist nicht standardisiert. Meine Manpage unter Linux sagt mir, dass der Speicher freigegeben wird, wenn die Funktion verlassen (also der Stackframe verschoben) wird; ob das überall der Fall ist, kann ich nicht mit Bestimmtheit sagen.
Im zweiten Fall ist der Speicher am Ende des Blockes ungültig, *x darfst du da also nicht mehr benutzen.
-
Das was seldon gesagt hat. Und im ersten Fall ist es noch gültig, die manpage ist da ziemlich eindeutig.
-
danke!