Ich garantiere, dass diese Frage zuvor gestellt wurde, aber ich konnte es nicht über die Suche finden; Entschuldigung im Voraus für irgendwelche Entlassungen.C Array Instanziierung - Stack- oder Heap-Zuordnung?
Es ist mein (möglicherweise falsches) Verständnis, dass Sie nur dem Stapel zuweisen, wenn Sie die Größe eines Objekts zur Kompilierzeit kennen. So im Fall eines Arrays initialisiert, können Sie eine davon tun (und das auf den Stapel gehen sollte):
char charArray[50];
Da die Größe dieses Arrays zum Zeitpunkt der Kompilierung bekannt ist, dies keine Probleme haben sollte.
Auf der anderen Seite, diese (glaube ich) ist auch gültige Code:
char anotherCharArray[someVariable + 50];
dies auch auf dem Stapel gehen würde? Ich bin ziemlich sicher, dass der Code segfolds, wenn Sie() dies freigeben, so dass es mich denken lässt, aber es macht keinen Sinn für mich. Ähnlich ist die 100% einzige Situation, in der Sie free() verwenden müssen, wenn die Daten über malloc zugewiesen wurden?
Vielen Dank im Voraus für Ihre Hilfe.
@Shookit: Sie müssen angeben, ob Sie über lokale Variablen oder globale Variablen sprechen. –
@PaulR Wenn das Array eine variable Länge hat, kann es nicht im globalen Gültigkeitsbereich sein. –
Sie müssen zwischen dem * automatischen Speicher * und dem * Stack * unterscheiden, bei dem es sich um eine Low-Level-Methode zum Speichern von Daten handelt. Daten, die im automatischen Speicher abgelegt werden, können auch an anderen Stellen wie in Registern abgelegt werden. Im Fall eines lokalen Arrays mit unbekannter Größe (bekannt als VLA: s) kann der Compiler es auf den Stack legen, es ist auch erlaubt, den Speicher auf dem Heap zuzuweisen (solange es ihn an geeigneten Stellen freigibt). In der Tat, VLA: s passen nicht gut zusammen mit 'setjmp' /' longjmp', da sie undicht werden können (und dürfen dies vom C-Standard tun). – Lindydancer