HolgerL Skrevet 4. februar 2008 Del Skrevet 4. februar 2008 Hvorfor får jeg feilmeldingen "test.c(8): warning #2173: Pointer to local 'foo' is an illegal return value."? Jeg forsøker å lage en funksjon (bar()) som skal returnere en peker til en nyopprettet struct. typedef struct { int n; } foobar; foobar* bar(int n) { foobar foo; foo.n = n; return &foo; } int main(int argc, char* argv) { foobar* foo = bar(3); return 0; } Lenke til kommentar
charlie di meola Skrevet 4. februar 2008 Del Skrevet 4. februar 2008 foobar* bar(int n) { foobar *foo = (foobar *)malloc(sizeof(foobar)); foo->n = n; return foo; } du returner adressen til en lokal variabel. når den går ut av scope er du ikke lenger garantert at den inneholder korrekt data. Lenke til kommentar
HolgerL Skrevet 4. februar 2008 Forfatter Del Skrevet 4. februar 2008 Jeg skjønner. Er det ikke mulig å opprette en struct i en funksjon og så bare returnere pekeren til den? Lenke til kommentar
charlie di meola Skrevet 4. februar 2008 Del Skrevet 4. februar 2008 (endret) prøv foo funksjonen jeg postet i forrige innlegg edit: ehh... bar() mente jeg seff Endret 4. februar 2008 av charlie di meola Lenke til kommentar
HolgerL Skrevet 4. februar 2008 Forfatter Del Skrevet 4. februar 2008 Ah, la ikke merke til den. Takk, det funket! Lenke til kommentar
GeirGrusom Skrevet 5. februar 2008 Del Skrevet 5. februar 2008 Grunnen til at det ikke fungerer er at slike variabler blir deallokert når den går ut av scope (add esp, -sizeof(foo)) så hva som vil ligge der når du bruker referansen etterpå er udefinert. Lenke til kommentar
asicman Skrevet 5. februar 2008 Del Skrevet 5. februar 2008 Dette vil også "virke" foobar* bar(int n) { static foobar foo; foo.n = n; return &foo; } Men da er det den samme foo du refererer til hele tiden. Er litt usikker på hva du egentlig vil gjøre. Bruker du malloc må gjøre free hvis ikke vil programmet ditt bruke opp minne over tid (minnelekkasje). Lenke til kommentar
GeirGrusom Skrevet 6. februar 2008 Del Skrevet 6. februar 2008 Hvorfor ikke bare returnere foo, istedet for en referanse til foo? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå