free
-
ist es eigentlich möglich, wenn man für ein Array den Speicher allokiert hat, z.B. so:
for(int n=0;n<100000;n++) { arr[n]=(char *)malloc(strlen(arr[n])); //... }
diesen auch innerhalb der Schleife wieder frei zu geben? (bzw. jeweils das Element, welches von der Schleife grade bearbeitet wurde)
z.B. so????for(int n=0;n<100000;n++) { arr[n]=(char *)malloc(strlen(arr[n])); free(arr[n-1]) //... }
-
Hallo,
ich wüsste jetzt nicht, was dagegen spricht, außer dem Sinn. Denn du speicherst die ja in ein Array, um später evtl. mal darauf zuzugreifen. Wenn du die dann in der Schleife direkt wieder löscht, darfst du natürlicht nicht mehr darauf zugreifen, und somit ist ein Array sinnlos. Dann kannst du im Grunde auch eine einzelne Variable nehmen und die immer wieder überschreiben.
-
Schon diese Anweisung macht wenig Sinn.
Frauke schrieb:
arr[n]=(char *)malloc(strlen(arr[n]));
Außerdem seh ich da schon wieder große Probleme:
1. strlen(arr[n]) dürfte einen undefinierten Wert ergeben (keiner weiß genau wo arr[n] hinzeigt und wann nach dieser Stelle endlich mal eine 0 kommt), wenn arr[n] vorher noch nicht reserviert wurde
2. Wenn arr[n] doch vorher schon reserviert wurde, dann gibt es durch die neue Reservierung eine (eigentlich 100.000 !!!) Speicherleiche(n)Aber mal zur eigentlichen Frage:
Das free() kannst du jederzeit anwenden, hauptsache du übergibst der Funktionen einen Zeiger, der auf einen durch malloc(), calloc() bzw. realloc() reservierten Speicher zeigt. Sonst wirds voraussichtlich Laufzeitfehler geben!