goutbouyo
Messages postés429Date d'inscriptionmardi 6 juillet 2004StatutMembreDernière intervention12 janvier 2008
-
16 oct. 2006 à 13:12
goutbouyo
Messages postés429Date d'inscriptionmardi 6 juillet 2004StatutMembreDernière intervention12 janvier 2008
-
17 oct. 2006 à 12:35
Salut,
J'ai une petite question concernant les pointeurs :
J'ai une fonction qui alloue de la mémoire à un pointeur passé en paramètre :
void CreeTableau(int *tab)
{
tab = new int[10];
tab[0]=5;
}
Et ma fonction main() :
int main()
{
int *myTab=0;
CreeTableau(myTab);
cout << "mytab : " << myTab[0];
return 0;
}
Pouvez vous me dire pourquoi la mémoire est allouée pour la varianle locale tab mais pas pour la variable passée en paramètre myTab ???
mad_love_disease
Messages postés64Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention 1 juillet 20103 16 oct. 2006 à 13:43
Yo goutbouyo,
C'est tout simplement parceque le paramètre int *tab est passé "par copie" dans ta fonction CreeTableau. Ton tableau est bien alloué, mais tu ne récupere pas son adresse. Essaye plutot:
int * CreeTableau()
{
int * tab = new int[10];
tab[0]=5;
return tab;
}
Et ma fonction main() :
int main()
{
int *myTab=0;
myTab = CreeTableau(myTab);
cout << "mytab : " << myTab[0];
return 0;
}
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 16 oct. 2006 à 14:21
En règle générale, il vaut mieux éviter de passer un pointeur vers une fonction qui s'occupe de l'allocation. Si on ne peut pas faire autrement, ne pas oublier la fonction de désallocation!!!
NB: dans le copier-coller de Mad_love_disease, il y a une erreur: pas d'argument à la fonction CreeTableau()
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
goutbouyo
Messages postés429Date d'inscriptionmardi 6 juillet 2004StatutMembreDernière intervention12 janvier 2008 16 oct. 2006 à 17:46
Ok merci j'ai compris maintenant.
Et si j'utilise le passage par réference en remplaçant :
void CreeTableau(int *tab)
{
tab = new int[10];
tab[0]=5;
}
par
void CreeTableau(int &*tab)
{
tab = new int[10];
tab[0]=5;
}
goutbouyo
Messages postés429Date d'inscriptionmardi 6 juillet 2004StatutMembreDernière intervention12 janvier 2008 16 oct. 2006 à 20:36
void CreeTableau(int &*tab) <= incorrect, et ca n'a aucun sens. un pointeur sur une référence ? ?
Ca serait pas plutôt une référence sur un pointeur ça ???
Donc en clair, avec une référence, je fait ça:
void CreeTableau(int &*tab)
ou :
void CreeTableau(int *&tab)
goutbouyo
Messages postés429Date d'inscriptionmardi 6 juillet 2004StatutMembreDernière intervention12 janvier 2008 16 oct. 2006 à 21:22
Quelle explication détaillée !!! J'ai tout compris.
Donc pour un tableau à 2 dimensions ça donne :
void CreeTableau(int** &tab)
{
tab = new int*[10];
for (int i=0; i<10; i++)
tab[i] = new int[5];
tab[0][0]=5;
cout << "tab : " << tab[0][0];
}
int main()
{
int **myTab=0;
CreeTableau(myTab);
cout << "mytab : " << myTab[0][0];
return 0;
}