Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
malloc und free

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
weissi



Anmeldungsdatum: 24.03.2001
Beiträge: 40
Wohnort: Freiburg

BeitragVerfasst am: 08. Apr 2001 12:59   Titel: malloc und free

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)Wink. 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
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

siegel
Gast





BeitragVerfasst am: 09. Apr 2001 9:56   Titel: Re: malloc und free

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



Anmeldungsdatum: 24.03.2001
Beiträge: 40
Wohnort: Freiburg

BeitragVerfasst am: 09. Apr 2001 11:25   Titel: Re: malloc und free

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

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;
}
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Stefan
Gast





BeitragVerfasst am: 09. Apr 2001 14:51   Titel: Re: malloc und free

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



Anmeldungsdatum: 24.03.2001
Beiträge: 40
Wohnort: Freiburg

BeitragVerfasst am: 18. Apr 2001 12:33   Titel: Re: malloc und free

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 Smile)) )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
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy