anwendung von free() auf ein char *array[x]



  • hallo.

    ich habe ein array von zeigern auf chars.
    char *index[] = {"1111", "222222", "33" };
    kann ich den speicher aller arrayelemente einfach mit free(index) freigeben? glaube ich nicht, bin aber nicht sicher. wenn nicht, muss ich jedes element einzeln free()n. das heisst auch, dass wenn ich den wert eines elements aendern moechte, ich ihn entweder einfach ueberschreibe (naturlich mit ueberlaufkontrolle) und somit, solange der neue elementinhalt nicht gleich lang dem alten ist, immer einige bytes speicher verschenke, da hinter '\0' ja noch bytes des ehemaligen strings sind, oder das element einzeln free()e und an diesem array indizes einen neuen string allokiere. das wirkt umstaendlich... zu umstaendlich um wahr zu sein. oder irre ich mich in der syntax?

    Gruss
    caspar



  • @Caspar,

    meiner Meinung nach kannst du in diesem Fall die
    Strings nicht mit free freigeben.
    Ich war bisher immer der Meinung, dass in diesem Fall
    die Strings auf dem Stack und nicht im Heap liegen.
    Ich lasse mich aber gern eines besseren belehren.

    Bye Peter.



  • free() darf ausschließlich auf Speicherblöcke angewandt werden, die vorher mit malloc(), calloc(), realloc() oder strdup() angefordert wurden. Anderenfalls landet Dein Programm im Nirwana.



  • ___Peter schrieb:

    Ich war bisher immer der Meinung, dass in diesem Fall
    die Strings auf dem Stack und nicht im Heap liegen.

    Sie liegen weder auf dem Heap noch auf dem Stack, sondern in der Datensektion des Programms. Dort dürfen sie ruhig auch bleiben, ohne freigegeben werden zu müssen.



  • @Krösus,
    OK danke...
    wieder was gelernt.

    Bye Peter.



  • ich habe nicht deutlich erwaehnt, dass das array index[] zur laufzeit gefuellt wird. das wuerde heissen, wenn denn fuer jeden string als element von index[] speicher allokiert wird, dass die daten auf dem heap landen und von dort auch wieder mit free() freigegeben werden koennen.



  • Wenn du strings auf dem Heap speicherst, also mit malloc, dann musst du den Speicher mit free wieder löschen?! Wenn du also 5 malloc Aufrufe hast, musst du auch 5 free Aufrufe haben.


Log in to reply