Codes / Entwicklungsumgebungen

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

hsma2510

Grünschnabel
Hallo erneut :).

Ich habe hier einen Code, von einem Youtuber. Wenn mein Kommilitone diesen Code ausführt, dann wird das Array nicht gelöscht. Bei dem Youtuber aber schon.

Wenn ich diesen Code ausführe, mit free() und auch ohne free(), dann wird bei mir nicht mal das Array ausgedruckt. Werden Codes von unterschiedlichen Entwicklungsumgebungen anders behandelt?

Vielen Dank voraus.


C:
int main(int argc, const char * argv[]) {


    int n;
    printf("Enter size of array\n");
    scanf("%d", &n);
    int A = (int)malloc(n*sizeof(int));
    for (int i = 0; i < n; i++) {
        A[i] = i+1;
    }

    free(A);

    for (int i = 0; i < n; i++) {
        printf("%d ", A[i]);
    }
 
Werden Codes von unterschiedlichen Entwicklungsumgebungen anders behandelt?
Jain.

free(A) überschreibt A nicht. Der Speicher gehört dir einfach nicht mehr, er kann für anderes verwendet werden.
D.h. ein free() sagt nur: "Ich brauche den Speicher nicht mehr".
Unterschiedliche Betriebssysteme und Bibliotheken können nun wählen, ob sie den Speicher überschreiben oder nicht.
Jeder Zugriff auf A nach dem free() ist undefined behavior, es kann also irgendwas passieren. Daher ist bei manchen Systemen dann mit speziellen Werten überschrieben, bei manchen Systemen erst, wenn jemand anders den Speicher alloziert.

Gruss
cwriter
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…
Zurück