Archiv verlassen und diese Seite im Standarddesign anzeigen : speicher außerhalb einer funktion verwenden
rosenstolz
11-03-2003, 11:16
Hallo,
hat jemand von euch damit erfahrung:
ich übergeben einer funktion einen zeiger auf "int", in dieser funktion reserviere ich mit malloc bzw. realloc speicher (für int) fülle den speicher mit zahlen. kann ich jetzt den übergebenen int-Zeiger auf die addresse, welche von malloc/realloc zurückgegebenen wird, setzen. um so den reservierten speicher inkl. daten nach beendigung der funktion weiterzuverwenden ?
also einfach ausgedrückt, kann speicher welcher innerhalb einer funktion reserviert wird auch nach beendigung dieser verwendet werden ??
danke, martin
Hi,
Original geschrieben von rosenstolz
ich übergeben einer funktion einen zeiger auf "int", in dieser funktion reserviere ich mit malloc bzw. realloc speicher (für int) fülle den speicher mit zahlen. kann ich jetzt den übergebenen int-Zeiger auf die addresse, welche von malloc/realloc zurückgegebenen wird, setzen. um so den reservierten speicher inkl. daten nach beendigung der funktion weiterzuverwenden ?
Bei Deinem Beispiel ist die Variable ja schon außerhalb der Funktion und kann deshalb nach beenden der Funktion auch weiterverwendet werden.
also einfach ausgedrückt, kann speicher welcher innerhalb einer funktion reserviert wird auch nach beendigung dieser verwendet werden ??
Wenn der Speicher dynamisch erzeugt wird, ja:
int *foo (void)
{
int *bar = (int*)malloc (sizeof(int));
*bar = 5;
return (bar);
}
int main (void)
{
int *res = foo ();
printf ("result: %i\n", *res);
free (res);
return (0);
}
Bei Deinem oberen Beispiel ist eine dynamische Reservierung nicht notwendig, da Du ja schon die Adresse der Variablen mit übergibst:
void foo (int *bar)
{
*bar = 5;
}
int main (void)
{
int res;
foo (&res);
printf ("result: %i\n", res);
return (0);
Gruß micha
anda_skoa
11-03-2003, 13:38
Wenn du einen Pointer übergibst, wird die Pointervariable selbst kopiert, d.h. eine Änderung der Variable bewirkt nicht, dass die externe Variable auf den neuen Speicher zeigt.
Du kannst es entweder mit einem return machen, wie micha geschrieben hat, oder du übergibts einen int**, also einen Pointer auf den Pointer, oder, im Falle von C++, eine Referenz auf den Pointer.
Ciao,
_
rosenstolz
11-03-2003, 14:37
danke erst einmal für eure antwort.
anda_skoa: meiner meinung nach kann ich doch einen zeiger immer und immer wieder auf eine andere andresse zeigen lassen. dadurch dann die variable unter dieser adresse ändern.
mein bsp:
#define PAKET 256
struct xy
{
int *zgr;
int in;
int out;
}
void func(struct xy *ab)
{
ab->zgr=malloc(PAKET*sizeof(int));
/* nun wird der reservierte speicher gefüllt */
}
int main(void)
{
int a;
struct xy ab;
func(&ab);
for(a=0; a<PAKET; a++)
printf("%d \n", ab.zgr[a]);
return(0);
}
also so ungefähr sollte das aussehen
gruß martin
rosenstolz
11-03-2003, 14:39
oh... kann das mal jemand bitte verschieben unter "speicher außerhalb einer funktion verwenden "
danke ,o)
anda_skoa
11-03-2003, 17:53
Original geschrieben von rosenstolz
oh... kann das mal jemand bitte verschieben unter "speicher außerhalb einer funktion verwenden "
kein Problem :)
Ciao,
_
anda_skoa
11-03-2003, 17:55
Original geschrieben von rosenstolz
void func(struct xy *ab)
{
ab->zgr=malloc(PAKET*sizeof(int));
/* nun wird der reservierte speicher gefüllt */
}
Das geht schon.
Aber du kannst eine Änderung an ab selbst außen nicht sehen.
Ciao,
_
rosenstolz
12-03-2003, 08:36
joah das klappt wunderbar, so wie ich es brauche bzw. mir gedacht habe ;)
danke...
gruß martin
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.