That Guy
Meubilair
- Lid geworden
- 28 nov 2006
- Berichten
- 5.010
Goedenavond allemaal,
Sinds kort bezig met C. Nu ben ik druk bezig met programmeren en tot nu toe gaat het, met vallen en opstaan, best goed. Nu zit ik met de volgende vraag;
Ik heb een functie die een pointer naar een struct retourneerd. Nu had ik deze struct aangemaakt in de functie, zoiets:
[CPP]somestruct * bbq(...)
{
somestruct foo;
// hier allemaal magie
return &foo; // oid; het returnde iig een pointer naar foo.
}[/CPP]
nu kreeg ik steeds de fout: warning: function returns address of local variable [enabled by default]
Nu snap ik dat foo lokaal wordt gemaakt, en deze dus weg is op het moment dat de functie klaar is. (overigens 'werkte' dit wel en kon ik 't later gewoon gebruiken... ?! dit snap ik dus ook niet...)
Nu heb ik dit opgelost door dit te doen:
[CPP]somestruct * bbq(...)
{
somestruct * foo = malloc( sizeof(somestruct) );
// weer allemaal magie...
return foo;
}[/CPP]
En dit werkt verder prima.
Ohja, daarnaast: ik kan nu toch gewoon later free() aanroepen buiten de functie?
Nu, de grote vraag is dit: waarom kan ik (zonder errors) wel dit doen? Overigens: somestruct ziet er ongeveer zo uit:
[CPP]typedef struct .....
{
another_struct * asp; // wijs naar een another_struct
....
} somestruct;[/CPP]en another_struct:[CPP]typedef struct .....
{
int iets;
char * ietsanders;
....
} another_struct;[/CPP]
[CPP]somestruct * bbq(...)
{
somestruct * foo = malloc( sizeof(somestruct) );
// bar is een another_struct
another_struct bar; // let op: bar is lokaal! in deze functie!
// geef spul een waarde
bar.iets = 3;
bar.ietsanders = "een string";
// okay, foo.asp wijst nu naar bar...
foo->asp = &bar;
return foo;
}[/CPP]
MAAR! als bar ook in de functie gemaakt wordt, waarom geeft GCC dan geen error? Of eigenlijk: waarom werkt dit wel?
Alvast bedankt!
Sinds kort bezig met C. Nu ben ik druk bezig met programmeren en tot nu toe gaat het, met vallen en opstaan, best goed. Nu zit ik met de volgende vraag;
Ik heb een functie die een pointer naar een struct retourneerd. Nu had ik deze struct aangemaakt in de functie, zoiets:
[CPP]somestruct * bbq(...)
{
somestruct foo;
// hier allemaal magie
return &foo; // oid; het returnde iig een pointer naar foo.
}[/CPP]
nu kreeg ik steeds de fout: warning: function returns address of local variable [enabled by default]
Nu snap ik dat foo lokaal wordt gemaakt, en deze dus weg is op het moment dat de functie klaar is. (overigens 'werkte' dit wel en kon ik 't later gewoon gebruiken... ?! dit snap ik dus ook niet...)
Nu heb ik dit opgelost door dit te doen:
[CPP]somestruct * bbq(...)
{
somestruct * foo = malloc( sizeof(somestruct) );
// weer allemaal magie...
return foo;
}[/CPP]
En dit werkt verder prima.
Ohja, daarnaast: ik kan nu toch gewoon later free() aanroepen buiten de functie?
Nu, de grote vraag is dit: waarom kan ik (zonder errors) wel dit doen? Overigens: somestruct ziet er ongeveer zo uit:
[CPP]typedef struct .....
{
another_struct * asp; // wijs naar een another_struct
....
} somestruct;[/CPP]en another_struct:[CPP]typedef struct .....
{
int iets;
char * ietsanders;
....
} another_struct;[/CPP]
[CPP]somestruct * bbq(...)
{
somestruct * foo = malloc( sizeof(somestruct) );
// bar is een another_struct
another_struct bar; // let op: bar is lokaal! in deze functie!
// geef spul een waarde
bar.iets = 3;
bar.ietsanders = "een string";
// okay, foo.asp wijst nu naar bar...
foo->asp = &bar;
return foo;
}[/CPP]
MAAR! als bar ook in de functie gemaakt wordt, waarom geeft GCC dan geen error? Of eigenlijk: waarom werkt dit wel?
Alvast bedankt!
Laatst bewerkt: