malloc free auf einem auge blind



  • hallo,

    ich verstehe es einfach nicht. warum klappt die speicherfreigabe nicht, bekomme bei free naemlich eine fehlermeldung.

    char *test = (char *) malloc(sizeof(char)*8);
      strcpy(test, "no_entry");
      free(test);
    


  • du reservierst Platz für 8 Zeichen, aber "no_entry" hat 9: { 'n', 'o', '_', 'e', 'n', 't', 'r', 'y', '\0' }



  • btw.
    a) brauchst du den Rückgabewert von malloc nicht casten (das sorgt eher für einen Fehler(!), benutze die Suchfunktion wenn du mehr wissen willst, weil das Thema mindestens 5mal pro Woche hier erwähnt wird)

    b) ist sizeof(char) immer 1, weil sizeof die größe eines Typs im Verhältniss zur größe eines chars misst.

    c) kann es glaub ich schneller sein, wenn du die größe des zu kopierenden Strings kennst strncpy/memcpy zu nehmen



  • kingruedi schrieb:

    strncpy

    Diese Funktion, die entweder keinen oder viel zu viele Terminatorzeichen (Spezialfall: eins) setzt, kann man rückstandsfrei aus seinem aktiven C-Vokabular streichen. YMMV.



  • ja, da hast du recht. Anstelle strncpy lässt sich IMHO idr. memcpy viel praktischer verwenden, wobei wahrscheinlich strncpy noch nichtmal unbedingt beschleunigt arbeitet


Anmelden zum Antworten