Ich habe ein Char-Array wie folgt erstellt:
char arr[3] = "bo";
Wie gebe ich den Speicher frei, der dem Array mit dem Namen “arr” zugeordnet ist?
AbhishekSaha
Ich habe ein Char-Array wie folgt erstellt:
char arr[3] = "bo";
Wie gebe ich den Speicher frei, der dem Array mit dem Namen “arr” zugeordnet ist?
rullof
Lokale Variablen werden automatisch freigegeben, wenn die Funktion endet, Sie müssen sie nicht selbst freigeben. Sie geben nur dynamisch zugewiesenen Speicher frei (z. B. mit malloc
) wie es auf dem Heap zugewiesen ist:
char *arr = malloc(3 * sizeof(char));
strcpy(arr, "bo");
// ...
free(arr);
Mehr zur dynamischen Speicherzuweisung: http://en.wikipedia.org/wiki/C_dynamic_memory_allocation
Du gibst überhaupt nichts frei. Da Sie niemals Ressourcen dynamisch erworben haben, müssen oder dürfen Sie nichts freigeben.
(Es ist dasselbe wie wenn du sagst int n = 10;
: Es sind keine dynamischen Ressourcen beteiligt, die Sie manuell verwalten müssen.)
Die Erinnerung verbunden mit arr
wird automatisch freigegeben, wenn arr
geht aus dem Rahmen. Es ist entweder eine lokale Variable oder statisch zugewiesen, aber nicht dynamisch zugewiesen.
Eine einfache Regel, die Sie befolgen müssen, ist, dass Sie nur jeden Anruf tätigen müssen free()
auf einem Zeiger, der von einem Aufruf von zurückgegeben wurde malloc
, calloc
oder realloc
.
Ramkumar Lodhi
char arr[3] = "bo";
Das arr bringt den Speicher in das Stapelsegment. welches automatisch frei wird, wenn arr den Gültigkeitsbereich verlässt.
Sie sollten dies als deklarieren
char arr[] = "bo"
damit der Compiler die Länge berechnen kann und so sicherstellen, dass genügend Platz für ein Null-Terminator vorhanden ist. Wenn Sie Ihren Code in geändert habenchar arr[3] = "boo";
dann gäbe es kein Null-Terminator.– David Heffernan
2. Februar 2014 um 17:27 Uhr