pointeur [debutant] - C - Programmation
Marsh Posté le 18-05-2007 à 09:33:33
D'abord ptrnum c'est un pointeur vers un pointeur sur un pointeur d'entier, pas un pointeur sur un pointeur d'entier. Ensuite si tu as besoin de faire des choses avec 4 niveau d'indirection, tu es mal barré. Quelque chose me dit qu'il y a un problème d'architecture dans ton appli.
Enfin, tout dépend de ce que tu as mis dans *ptrnum et **ptrnum. Puisque tu ne donnes aucun détail à ce sujet, on ne peut pas répondre. Il y a des chances pour qu'une de ces adresses ne contienne pas ce que tu penses qu'elle contient. En faisant un malloc plus large, ton code ne fait toujours pas que tu penses qu'il fait, mais par chance il tombe dans la zone mallocée et donc ça passe.
Marsh Posté le 18-05-2007 à 14:12:50
Il faudrai voir le code en détail mais tu as sans doute un problème avec la notion de pointeur.
Pour pouvoir faire ****ptrnum=t; il faut d'abord avoir déjà alloué de la place pour ptrnum, ce qui a priori est fait, (mais pourquoi fais-tu verifnum(&ptrnum); ? tu as l'intention de modifié la valeur attribuée à ptrnum ?) ensuite à *ptrnum par un malloc(xxx * sizeof int **) puis à **ptrnm par un malloc(xxx * sizeof int *) puis enfin ***ptrnum par un malloc(xxx * sizeof int).
Est-ce fait ?
Marsh Posté le 18-05-2007 à 18:28:47
non ce n'est pas sa.
En fait une fonction devra appeler une fonction qui va appeler ce pointeur.
J'ai donc besoins d'un int***
Le fait est que je veux attribuer une valeur entière à ce ****ptrnum pour pouvoir la récupérer apres dans la dernière fonction appelée.
Marsh Posté le 18-05-2007 à 18:42:25
Ok merci à tous c'est bon maintenant.
J'avais oublié de réserver *ptrnum **ptrnm ***ptrnum donc forcément sa ne pouvait pas marcher.
Marsh Posté le 18-05-2007 à 19:07:50
Anarchne a écrit : Ok merci à tous c'est bon maintenant. |
Exact. Mais cependant, manipuler des pointeurs a 4 niveaux est une porte ouverte aux bugs. Es-tu certain d'avoir besoin de 4 dimensions ???
Sinon la question de Trap D est importante. Pourquoi passes-tu à ta fonction l'adresse de "ptrnum" alors qu'apparemment tu ne va pas modifier "ptrnum" mais "****ptrnum" ???
Généralement, on ne passe un pointeur à une fonction que dans 2 cas
Marsh Posté le 17-05-2007 à 22:40:07
Bonjour.
Je voudrais créer un pointeur sur pointeur sur pointeur d'entier soit un int***
J'ai un problème lors de la réservation:
je fais:
int ***ptrnum;
ptrnum=(int***)malloc(sizeof(int**));
j'appelle ensuite une fonction qui a pour entrée ce pointeur:
verifnum(&ptrnum);
or dans cette fonction j'attribut une valeur entiere au contenu du pointeur:
****ptrnum=t; (avec t entier)
et sa bloque à ce moment là.
Je ne comprend pas trop pourquoi surtout que lorsque je met """ ptrnum=(int***)malloc(sizeof(int)*80); """ par exemple, cela marche.
lorsque l'on met sizeof(int**) ne devrait t-il pas réserver l'espace adéquat pour stocker l'entier???