malloc und free

Post Reply
Message
Author
weissi
Posts: 40
Joined: 24. Mar 2001 20:16
Location: Freiburg
Contact:

malloc und free

#1 Post by weissi »

Hi,
ich hab ein Problem: Ich habe ein Programm, dass viele char *Pointer macht, diese dann Pointer=(char *)malloc(x) mit der Größe x alloziiert, und sie nachher wieder freigibt(free(Pointer);). Das Programm hat aber auch globale Variablen, wann soll ich diese free()'en, kurz vor main()-return(), oder vielleicht gar nicht.

Ein ähnliches Problem habe ich mit einer Funktion die einen ge'malloc()'ten char* zurückgeben soll, wann soll diese den Zeiger am besten freigeben

Ich hoffe ich könnt mir weiterhelfen...
Danke schon mal im Vorraus Weissi

siegel

Re: malloc und free

#2 Post by siegel »

Globale Daten freigeben ??
Kurz vor return() in main() macht wenig Sinn da das Programm ohnehin vor der Beendigung steht.

Wenn Du aber in Subroutines irgend welche Work-Strings mit malloc anlegst und später im Hauptprogramm nicht brauchst, dann kannst Du sie vor dem return zum Hauptprogramm wieder freigeben (free).

Ich bin mir aber nicht ganz sicher ob ich dein Posting ganz verstanden haben.

Greetz Sulu

weissi
Posts: 40
Joined: 24. Mar 2001 20:16
Location: Freiburg
Contact:

Re: malloc und free

#3 Post by weissi »

Thnx erstmal, die erste Frage hattest du rihtig verstanden, und ich werde das jetzt auch so machen :))

Aber die 2. hattest du, glaub ich, etwas falsch verstanden. Dass ich die Pinter kurz vor dem return in die main() (oder andere) free'e, ist klar. Aber was ist wenn diese Funktion diesen Zeiger zurückegeben soll, dann kann ich den ja schlecht davor free'en. Ich habe mich jetzt ein bisschen mit Pointern auseinandergesetzt und werde heute Abend mal testen, ob ich die nicht einfach in der main() aus free'en kann...
Ein Beispiel

char *func() {
char *test;
test=(char *)malloc(100);
strcpy(test, "hallo, das ist ein Test!!!");
return(test);
}

main() {
char *t2;
t2=(char *)malloc(100);
strcpy(t2, func() );
printf ("%s", t2);
free(t2);
return 0;
}

Stefan

Re: malloc und free

#4 Post by Stefan »

Hi.

Die Rüchgabe von Pointer über return, für doch zu Schwierigkeiten, da im Normalfall eine nur eine Kopie des Wertes (Call by Copy) zurückgegeben wird. Man kann aber mit der Funktion einen Pointer übergeben an den die Funktion dann den Speicher zuweist:

void test(char*);

dann muß dieser Speicher in der Main, bzw. in der aufrufenden Funktion, zersört werden.


Für das erste Problem, zerstören von globalen Speicher, kann man mit der funktion:

void atexit( void(*funktion)(void) );

funktionen registrieren. Diese Funktionen werden beim verlassen des Programms mit exit(), im LIFO Pripzip aufgerufen.

weissi
Posts: 40
Joined: 24. Mar 2001 20:16
Location: Freiburg
Contact:

Re: malloc und free

#5 Post by weissi »

Hi mal wieder,
stimmt, das kann man machen, (ich habe einen Teil aus einem Buch gelsen, in dem es um Pointer geht, jetzt weiss ich wie das geht :))) )man kann aber auch ohne Probleme einen Pointer zurückgeben.
z.B.


int * meinFunc();

main() {
int * ganzeZahl;
int nochNeGanze;
ganzeZahl = meinFunc();
&nochNeGanze = meinFunc();
printf ("Entweder so: &d oder so &d", *ganzeZahl, nochNeGanze);
return (*ganzeZahl + nochNeGanze);
}

int * meinFunc() {
int * zeiger;
*zeiger = 1 * 2 + 3;
return zeiger;
}



Genau so kann man das auch mit char *'s machen, wenn man sie zuvor ge'malloc't hat, dann free()'d man sie halt in der main, oder sonstwo. Man muss halt nur aufpassen, dass sie auch im richtigen Moment ge'malloc't ist...
Weissi

Post Reply