free()

hsma2510

Grünschnabel
Hey, also mein Code scheint noch nicht ganz fertig zu sein.
Ich möchte nach dem ich die adr1 und adr2 erstellt habe, die Adressen wieder löschen.

Nur wenn ich die adr1 lösche, dann wird die adr2 mit gelöscht.

Code:
#include <stdio.h>
#include <stdlib.h>
struct ad_struct {

    char *name;
    char *street;
    int number;
    char *city;
    int postal;

}adr1 = {"Ernie", "Sesamstreet", 55, "Mannheim", 68160},
        adr2 = {"Bert", "Sesamstreet", 56, "Mannheim", 68160};

void kon(struct ad_struct *that,struct ad_struct adr ){

    that->name = adr.name;
    that->street = adr.street;
    that->number = adr.number;
    that->city = adr.city;
    that->postal = adr.postal;

}

void print(struct ad_struct *that){

    printf("Name: %s\n Strasse: %s Nummer: %d \n Stadt: %s Postleitzahl: %d \n",that->name,that->street,that->number,that->city,that->postal);
}
int main(int argc, char**argv) {

    struct ad_struct *that = &adr1;
    struct ad_struct *that2 = &adr2;

    kon(that,adr1);

    print(that);

    kon(that2,adr2);
    print(that2);

   free(&adr1);

}
 
Lösung
Hi

Du kannst nichts mit free() löschen, was nicht mit malloc, calloc oder realloc erstellt worden ist.

free() ist für Heap-Objekte. Du freest eine Variable im Stack, das auf eine Variable im .data-Segment zeigt. Damit zerstörst du dein Programm.

Gruss
cwriter
Hi

Du kannst nichts mit free() löschen, was nicht mit malloc, calloc oder realloc erstellt worden ist.

free() ist für Heap-Objekte. Du freest eine Variable im Stack, das auf eine Variable im .data-Segment zeigt. Damit zerstörst du dein Programm.

Gruss
cwriter
 
Lösung
Zurück