free (probs)



  • hey,

    ich hab ein kleines Problem:

    int test(){
    
    //wenn ich ein 
    char test[] = "Hallo"; //deklariere 
    //muss ich es am ende der funktion löschen? oder zerstört es sich bei beenden der function selbst?
    
    char *new_str = (char *)malloc(100* size (char*));
    
    //tuhe mache getan...
    
    free (new_str); //an dieser stelle bekomme ich einen Fehler, free(): invalid next size
    
    return 1;
    }
    

    mach ich bei free was falsch????



  • misterxyz schrieb:

    //wenn ich ein
    char test[] = "Hallo"; //deklariere
    //muss ich es am ende der funktion löschen? oder zerstört es sich bei beenden der function selbst?

    da muss nix zerstört werden und daher braucht's auch keine besondere behandlung beim beenden eier funktion.

    misterxyz schrieb:

    char *new_str = (char *)malloc(100* size (char*));
    //tuhe mache getan...
    free (new_str); //an dieser stelle bekomme ich einen Fehler, free(): invalid next size

    du hast wahrscheinlich mit 'new_str' gerechnet o.ä. free braucht exakt den gleichen wert, den malloc geliefert hat, also zwischenspeichern oder auf die daten nur mit [] zugreifen.

    misterxyz schrieb:

    mach ich bei free was falsch????

    nö, aber beim 'malloc'. der cast ist unnötig und kann eventuelle fehler verschleiern.
    🙂



  • misterxyz schrieb:

    ...

    ...
    char *new_str = (char *)malloc(100* size (char*));
    ...
    

    hi!
    das dürfte gar nicht erst kompilieren, du meinst bestimmt sizeof(char*) ?
    dir ist klar, das sizeof(char) einen anderen wert als sizeof(char*) liefert ?
    🙂



  • Sehr gerne möchte ich hier auf meinen FAQ-Eintrag zum Thema malloc&co hinweisen:
    http://www.c-plusplus.net/forum/viewtopic.php?t=206606


Anmelden zum Antworten