Faulheit, Speicherfrage
-
Hallo,
ich habe folgenden Code:struct Foo { char *t1; int t2; }; Foo data = fillData(); printf("%s - %i\n", data.t1, data.t2); if (data.t1) { free(data.t1); }
Ich muss jedoch nach jedem Aufruf von fillData() die Variable mit dem char * mit free() wieder freigeben, da diese mit malloc in fillData() ein Wert zugewiesen wird. Gibt es da keinen anderen Weg das sauberer zu machen?
Vielen Dank,
DieFaulheit
-
DieFaulheit schrieb:
Ich muss jedoch nach jedem Aufruf von fillData() die Variable mit dem char * mit free() wieder freigeben, da diese mit malloc in fillData() ein Wert zugewiesen wird. Gibt es da keinen anderen Weg das sauberer zu machen?
vielleicht eine funktion, die das übernimmt?
void FreeData (struct Foo *f) { free (f->t1); f->t1 = 0; }
-
Sauberer? Keine Ahnung, was Du darunter verstehst, aber sowas ginge:
int fill_data( char ** text ) { static char *mem_text = 0; if( mem_text ) { free( mem_text ); // Edit: Klammern vergessen :/ } mem_text = malloc( 10 ); // ... sonstwas *text = mem_text; return deinen_integer_wert; } int main( ) { char *text; int number; number = fill_data( &text ); printf( "%s - %i\n", text, number ) }
greetz, Swordfish
-
-
Swordfish schrieb:
Sauberer? Keine Ahnung, was Du darunter verstehst, aber sowas ginge:
int fill_data( char ** text ) { // ... }
greetz, Swordfish
Was solln der Stuss ?
Da muss man auch free aufrufen !
-
au haua aua ! schrieb:
Was solln der Stuss ?
Da muss man auch free aufrufen !Aber nicht der caller.
<o(((°>
Friss!
greetz, Swordfish
-
crackwitz hat hier mal ein link eines gcs gepostet, für vektoren o.ä. wenn du eine funktion zum allokieren des gesamten speichers bereitstellst (weiß ja nicht, vielleicht wird malloc öfters aufgerufen) dann kannst du auch eine schreiben, die dir alles auf einmal wieder freigibt.
@ OT: übrigens ein
if(ptr) free(ptr);
kann man sich sparn... free kann auch mit nullzeigern aufgerufen werden.
-
jimbo schrieb:
@ OT: übrigens ein
if(ptr) free(ptr);
kann man sich sparn... free kann auch mit nullzeigern aufgerufen werden.
Stimmt, verdräng' ich immer wieder.
greetz, Swordfish
-
oder sowas
--> http://www.acm.org/tog/GraphicsGems/gemsiii/alloc/alloc.c