allocation dynamique et non dynamique...
bonjour,
voici deux fonction dans lesquels on a déclarer une varible int de deux manières différentes :
Code:
1 2 3 4 5 6
|
fct1()
{
widget pwindow;
} |
Code:
1 2 3 4 5 6 7 8
|
fct2(int a)
{
widget *pwindow;
pwindow=malloc(sizeof(widget));
} |
1) dans la premiere fonction fct1(),
on alloue DANS LA PILE une variable de type widget qui disparaitra donc a la sortie de la fonction
VRAI ou FAUX ????
2) dans la fonction fct2(),
on alloue dynamiquement DANS LE TAS ? ou DANS LA PILE ? une variable
de type widget.
le pointeur pwindow disparaitra a la sortie de la fonction mais... est-ce que l'allocation va disparaitre aussi ?
Re: allocation dynamique et non dynamique...
Bonjour,
Citation:
Envoyé par youp_db
Code:
1 2 3 4 5
| fct1()
{
widget pwindow;
} |
1) dans la premiere fonction fct1(),
on alloue DANS LA PILE une variable de type widget qui disparaitra donc a la sortie de la fonction
VRAI ou FAUX ????
Vrai, et je rajouterais qu'un prototype incomplet, c'est mal (void fct1(void), c'est pas sorcier à écrire, quand même).
Citation:
Envoyé par youp_db
Code:
1 2 3 4 5 6 7
| fct2(int a)
{
widget *pwindow;
pwindow=malloc(sizeof(widget));
} |
2) dans la fonction fct2(),
on alloue dynamiquement DANS LE TAS ? ou DANS LA PILE ? une variable
de type widget.
le pointeur pwindow disparaitra a la sortie de la fonction mais... est-ce que l'allocation va disparaitre aussi ?
On crée un objet de type pointeur sur widget dans la pile, et on tente de créer un objet de type widget dynamiquement, donc sur le tas. A la fin de la fonction, le pointeur est dépilé; mais le tas n'est pas modifié...
J'ai pas vérifié si c'est dans la FAQ, mais il y a des cours là-dessus sur le site, tu peux chercher aussi.
Re: allocation dynamique et non dynamique...
Citation:
Envoyé par youp_db
voici deux fonction dans lesquels on a déclarer une varible int de deux manières différentes :
Code:
1 2 3 4 5 6
|
fct1()
{
widget pwindow;
} |
Code:
1 2 3 4 5 6 7 8
|
fct2(int a)
{
widget *pwindow;
pwindow=malloc(sizeof(widget));
} |
1) dans la premiere fonction fct1(),
on alloue DANS LA PILE une variable de type widget qui disparaitra donc a la sortie de la fonction
VRAI ou FAUX ????
Vrai. (on dit 'mémoire automatique'. La 'pile' est une des façons d'implémenter la mémoire auto).
Citation:
2) dans la fonction fct2(),
on alloue dynamiquement DANS LE TAS ? ou DANS LA PILE ? une variable
de type widget.
malloc() demande une allocation en mémoire allouée. Il retourne l'adresse du bloc ou NULL en cas d'echec. (Le 'tas' est une des façons d'implémenter la mémoire allouée).
Citation:
le pointeur pwindow disparaitra a la sortie de la fonction mais... est-ce que l'allocation va disparaitre aussi ?
Non, bien sûr. Sinon, comment fonctionnerait malloc() ?
L'usage est de retourner l'adresse du bloc alloué.