PDA

Vollständige Version anzeigen : Allocierter Speicher wieder freigeben??


druschba
13.08.2003, 12:59
Hallo,
ich habe in C ein kleines Problem: :(

Ich allociere durch eine Variable vom Typ Char (String) einen bestimmten Speicherbereich.
Wie gebe ich den allocierten Speicherbereich wieder frei?? :confused:

Bin C Newbie und habe keine Ahnung... :confused:

*Druschba* :biggrinl:

doktor
13.08.2003, 14:48
Hallo
char * charString = "Irgendeintext";
char * ptr;
ptr = malloc(sizeof(charString));/*speicher anfordern*/
free(ptr);/*Speicher freigeben*/

gruss
doc

druschba
13.08.2003, 14:59
Besten Dank!

druschba
19.08.2003, 10:02
Hallo,

nach viel Schweiss und einigem Hin und Her habe ich den Fehler gefunden:

Ich habe den C Befehl malloc verwendet.
Dieser legt einen Speicherbereich an ohne ihn zu initialisieren.
Passend wäre calloc verwenden, dies legt einen Speicherbereich an und initialisiert ihn. ;)

Merci an Alle!

Druschba :biggrinl:

doktor
19.08.2003, 11:43
Hallo

Was meinst Du mit Initialisierung.
Beide Befehle fordern den speicher bestimmter Groesse vom Betriebssystem an.
bei malloc einmal
bei calloc x mal

return ist die Adresse des alloziertes Speicherbereichs oder NULL wenn es nicht geht.

gruss
doc

druschba
19.08.2003, 11:47
Hallo Doc,

genau das ist der Knackpunkt: :)

Ich brauche den Speicher mehrmals, d.h. freigeben und wieder reservieren... ;)

Initialisierung war 'unsauber' ausgedrückt, faux pas! :rolleyes:

:o)

Merci für deine Antworten und deine Hilfe! :biggrinl:

*druschba!* :cool:

doktor
21.08.2003, 09:18
Hallo

Mein Beispielcode hat Fehler!!!!!!!!!!!!!!!

malloc(sizeof(charString)) alloziert immer 4 Byte und zwar unabhaengig von der string laenge. Es ist die Grosse des Pointers.
man sollte malloc(strlen(charstring)+1); verwenden.

Bei kleinen Anwendungen merkt man das nicht da der compiller akceptiert es. Nur bei laengeren strings schreibt man sich ueber den speicher was zu den Abstuerzen fuehrt.

gruss
doc

druschba
21.08.2003, 10:22
Danke für den Hinweis! :cool:

mir gings eher um die Technik und da haut das wunderbar hin! ;)

Merci nochmals :biggrinl:

Druschba!