[c++]Besoins d'aide sur un pointer de pointer

Fermé
Mr. Mime - 14 janv. 2009 à 02:55
 loupius - 14 janv. 2009 à 23:45
Bonjour,
J'ai un petit problème lorsque je veux allouer de la mémoire dynamiquement.
Le pointeur de l'adresse du tableau à créer est dans mon main, et j'aimerais q'une fonction de type void
prenne se pointeur et alloue le tableau à l'intérieur.
Cependant, rien n'y fait, je crois que j'ai vraiment pas la bonne syntaxe...
Si j'ai poster avec comme titre pointeur de pointeur, c'est que j'ai bien l'impression que je vais devoir passer par là!

Le code est du style :

void allouer(int taille, int *pointeur)
{
*pointeur = new int[taille];
}

int main()
{
int* tableau = NULL;
allouer(25,tableau);
}
A voir également:

2 réponses

Oui, on peut utiliser un pointeur de pointeur, mais le plus simple:
int* allouer (int taille)
{
  return (new int[taille]);
}

int main()
{
  int* tableau = allouer (25);
  ...
  delete tableau;
  return 0;
}
Toutefois il serait plus sain et plus simple d'écrire:
int main()
{
  int* tableau = new int[25];
  ...
  delete tableau;
  return 0;
}
0
ou si tu veut continuer dans ta peripetie :

void allouer(int taille, int *pointeur)
{
*pointeur = new int[taille];
}

deviens

void allouer(int **pointeur) // pour un pointer simple
{
*pointeur = new int; // donc pas de tableau
}

enfin la tu creer un tableau dont cela ne marchera pas, il te faudras une etoile en plus

void allouer(int taille, int ***pointeur)
{
*pointeur = new int[taille];
}
0
loupius > Sora Oseka
14 janv. 2009 à 03:41
Le pointeur 3 étoiles, c'est rigolo, mais je ne suis pas sûr que ce soit efficace ;=)
0
Mr. Mime > Sora Oseka
14 janv. 2009 à 22:59
Pourquoi je peux pas allouer un espace memoire tableau dans la fonction allouer....? O_o...***
0
loupius > Mr. Mime
14 janv. 2009 à 23:45
Je ne vois pas la difficulté d'allouer de l'espace qui sera considéré comme un tableau (Lorsque l'on déclare 'int* p = new int', on peut considérer déclarer un tableau d'un seul élément de type 'int') .
void allouer (int taille, int **pointeur)
{
	*pointeur = new int[taille];  // L'idéal serait de faire un test sur 'taille'
}

int main (int argc, char **argv)
{
	int* tableau;
	allouer (25, &tableau);  // Il faudrait vérifier que tableau n'est pas NULL
	...
	delete tableau;
	return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
14 janv. 2009 à 23:28
Salut,
Oui, il faut passer par un double pointeur si tu veux l'allouer dans une fonction de type void.
Ce qui donne :
void allouer(const int taille, int **pointeur)
{
*pointeur = new int[taille];
}

int main(void)
{
int* tableau = NULL;
allouer(25,&tableau);
delete tableau;

return 0;
}

Cdlt
0