Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3009 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Problème de pointeur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de pointeur

n°1759079
katmai
Posté le 13-07-2008 à 20:44:55  profilanswer
 

Salut à tous,
 
J'ai un problème avec un pointeur qui me rend fou  :pt1cable: !
En fait j'ai une fonction qui me crée un tableau dynamique pointé par le pointeur.
L'appel de la fonction ne crée pas de problème mais lorsque je veux accéder aux données du tableau après l'appel j'ai le droit à une erreur de segmentation.
 
Autre chose lorsque je met les deux fonctions dans le même fichier je n'ai pas l'erreur de segmentation et tout se passe bien.
 
J'utilise le compilateur g++.
 
graph.h :
 

Code :
  1. void LoadExample(GLfloat *curVertexArray);


 
graph.cpp :
 

Code :
  1. void LoadExample(GLfloat *curVertexArray)
  2. {
  3. curVertexArray = new GLfloat[6];
  4. curVertexArray[0] = 0;
  5. curVertexArray[1] = 0;
  6. curVertexArray[2] = 0;
  7. curVertexArray[3] = 1;
  8. curVertexArray[4] = 1;
  9. curVertexArray[5] = 1;
  10. }


 
main.cpp:
 

Code :
  1. #include"graph.h"
  2. GLfloat *Vertex;
  3. void InitGL(int Width, int Height)
  4. {
  5.     int i;
  6.     glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
  7.     glClearDepth(1.0);
  8.     glDepthFunc(GL_LESS);
  9.     glEnable(GL_DEPTH_TEST);
  10.     glShadeModel(GL_SMOOTH);
  11.     glMatrixMode(GL_PROJECTION);
  12.     glLoadIdentity();
  13.     gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f);
  14.     glMatrixMode(GL_MODELVIEW);
  15.     BuildFont();
  16.     InitConsole();
  17.     glEnable(GL_LIGHTING);
  18.     glEnable(GL_LIGHT0);
  19.     glEnableClientState(GL_VERTEX_ARRAY);
  20.     LoadExample(Vertex);
  21.     glVertexPointer(3,GL_FLOAT,0,Vertex);
  22.     for (i=0;i<6;i++)
  23.     {
  24.         printf("Vertex[%d]=%f\n",i,Vertex[i]);   //erreur de segmentation ici.
  25.     }
  26. }


 
Quelqu'un as une idée d'où vient le problème problème?
 
Merci d'avance pour vos réponses.
 
A++

mood
Publicité
Posté le 13-07-2008 à 20:44:55  profilanswer
 

n°1759124
theshockwa​ve
I work at a firm named Koslow
Posté le 13-07-2008 à 23:59:42  profilanswer
 

Dans ta fonction, tu modifies la variable locale et donc ca n'a aucune influence à l'extérieur de ta fonction. Deux solutions donc : soit tu passes une référence vers ton pointeur dans ta fonction, soit (meilleure idée à mon avis) tu alloues ton tableau à l'extérieur de ta fonction.
Sinon, attention à ton utilisation de variables globales tout de même ... Ca semble assez peu justifié ici.

n°1759132
0x90
Posté le 14-07-2008 à 01:20:47  profilanswer
 

Tu peut aussi retourner ton pointeur plutôt que de le prendre en paramètre et faire un truc du genre
 
Vertex = LoadExemple();
 
dans ce cas, LoadExemple ferait effet de constructeur (dans un style pauvre, ala C), et tu ferait peut-être mieux de créer une classe pour ça (ce qui au passage te permettra de gérer le delete de ton tableau avec moins de soucis).


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1759142
Joel F
Real men use unique_ptr
Posté le 14-07-2008 à 09:22:58  profilanswer
 

et bon, std::vector quoi ...

n°1759196
katmai
Posté le 14-07-2008 à 15:33:55  profilanswer
 

Salut à vous!
 
Merci pour vos réponses rapides, j'ai fais une Class et ça marche impec  :bounce: .
 
Sinon c'est quoi les avantages de std::vector ?
 
Merci encore A+.

n°1759199
Joel F
Real men use unique_ptr
Posté le 14-07-2008 à 15:39:32  profilanswer
 

... c'est standard et certainement plus fool-proof que ta classe de tableau perso.
Juste pour voir, ta classe implante-elle une forme canonique de coplien propre ?

n°1759203
katmai
Posté le 14-07-2008 à 16:10:30  profilanswer
 

Ok je vais voir pour le std::vector
 
Sinon je n'ai qu'un constructeur et un destructeur.
Est-ce que je risque d'avoir des problèmes si je ne fais pas la forme canonique de coplien?
 
A++

n°1759209
ekra
Posté le 14-07-2008 à 16:28:39  profilanswer
 

theshockwave a écrit :

Dans ta fonction, tu modifies la variable locale et donc ca n'a aucune influence à l'extérieur de ta fonction. Deux solutions donc : soit tu passes une référence vers ton pointeur dans ta fonction, soit (meilleure idée à mon avis) tu alloues ton tableau à l'extérieur de ta fonction.
Sinon, attention à ton utilisation de variables globales tout de même ... Ca semble assez peu justifié ici.


 
Non il n'y a pas de problème à instancier un tableau de cette façon. La variable est locale mais pointe bien vers la même zone mémoire que celle qui est copiée. Mais pour les variables globales, je suis d'accord : à éviter.
Par contre tu as oublié de désallouer ton tableau avant la sortie de ton programme.

delete[] tableau

n°1759213
Joel F
Real men use unique_ptr
Posté le 14-07-2008 à 16:43:52  profilanswer
 

katmai a écrit :

Ok je vais voir pour le std::vector
 
Sinon je n'ai qu'un constructeur et un destructeur.
Est-ce que je risque d'avoir des problèmes si je ne fais pas la forme canonique de coplien?
 
A++


 
amuses toi à renvoyer une instance de ta classe par valeur ou à utiliser l'opérateur = dessus ca va etre fun sans FCC

n°1759252
katmai
Posté le 14-07-2008 à 18:38:08  profilanswer
 

Citation :

Par contre tu as oublié de désallouer ton tableau avant la sortie de ton programme.


 
Oui merci j'ai vu c'est pour faire des tests j'ai pas pris le temps de le faire.
 

Citation :

amuses toi à renvoyer une instance de ta classe par valeur ou à utiliser l'opérateur = dessus ca va etre fun sans FCC


 
Ok je vois! Par contre je ne peux pas utiliser std::vector car la fonction glVertexPointer me demande un pointeur vers un GLfloat et non pas un std::vector. Y a t'il une solution?
 
A+

mood
Publicité
Posté le 14-07-2008 à 18:38:08  profilanswer
 

n°1759258
Joel F
Real men use unique_ptr
Posté le 14-07-2008 à 18:58:55  profilanswer
 

Lire la doc de std::vector :o
 

Code :
  1. vector<GLfloat> stuff;
  2. //remplier stuff
  3. glVertexPointer( &stuff[0], ... );

n°1759332
katmai
Posté le 14-07-2008 à 23:45:23  profilanswer
 

Ok merci ça marche!
 
A+


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Problème de pointeur

 

Sujets relatifs
Problème de pointeur objet mère qui pointe sur objet filleProbleme de malloc sur un tableau de pointeur.
Probleme utilisation pointeur et referenceOpérations matrices problème structure pointeur
problème avec une fonction qui renvoie un pointeur de charprobleme de pointeur
Probleme de pointeurprobleme de pointeur
probleme de pointeurProblème avec pointeur dans une structure
Plus de sujets relatifs à : Problème de pointeur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR