OVH Cloud OVH Cloud

Bug ajout d'une variable dans une classe

5 réponses
Avatar
Regis Ramillien
Bonjour a tous,

Je poste sur ce newsgroup car j'ai un bug bizarre dans une de mes classes,
et je ne comprend pas pourquoi.
J'espere que vous pourrez m'aider...

J'ai un programme utilisant une librairie que j'ai créé qui fonctionnait
correctement jusqu'a maintenant.
J'ai voulu ajouter une variable dans la définition d'une de mes classes, et
je n'y arrive pas, il plante a l'execution, sans meme l'utiliser dans le
.cpp.

J'ai fait plusieurs essais, et quelque soit le type de la variable, int,
float, objet... avec l'importe quel nom, j'ai un plantage a l'execution à
l'adresse 0x0.
Je ne cromprend pas du tout pourquoi...
Donc je me pose plusieurs questions :
- est ce que ca vient de ma librairie ? La classe en question herite d'une
classe définit dans la librairie.
- est ce que ca vient de ma classe? j'ai rien de particulier, je l'ai relu
des dizaines de fois...
- est ce que ca vient des paramètres de mon projet? je suis obligé de mettre
en 'debogage multithread' sinon, ca ne fonctionne pas... et je ne sais pas
pourquoi non plus...
- est ce que c un bug du compilo ? je suis sous vs.net.

Je comprend vraiment pas, j'enleve un 'int toto', ca fonctionne, je le
remet, ca plante...

Merci d'avance de votre aide !

Régis

5 réponses

Avatar
Arnaud Meurgues
Regis Ramillien wrote:

J'ai voulu ajouter une variable dans la définition d'une de mes classes, et
je n'y arrive pas, il plante a l'execution, sans meme l'utiliser dans le
.cpp.


Et il plante à quel moment ?

--
Arnaud
(Supprimez les geneurs pour me répondre)

Avatar
regis Ramillien
Désolé, j'ai dit une bétise, il ne plante, ca c'est un ancien bug ;)
En fait, la librairie que j'ai faite permet de gérer des fenetre et
controles en opengl.
Lorsque je lance le programme normalement, il m'affiche bien une fenetre
avec mes controles dedans et tout (et j'appuie sur un bouton 'close' pour le
fermer.
Mais lorsque je rajoute un 'int toto' dans la déclaration de ma classe
principale (la fenetre qui gere tout), le programme se lance et se termine
tout de suite, sans rien afficher... alors que theoriquement, le fait de
rajouter une variable ne devrait rien changer...
Cela dit, j'ai une autre question, du coup, lorsque je met des breakpoints
dans mon programme, le compilo me met des '?' a l'interieur du cercle rouge
du breakpoint et ne s'y arrete jamais. Je pense que ca vient des paramètres
du projet, mais comme dit plus haut, j'y connait rien, j'ai bien essayé de
gratouiller (de mettre l'option '/debug', de lui donner un nom de fichier
pour la base), mais rien n'y fait...
Si vous pouviez aider un pauvre petit developpeur qui s'y perd...

merci ;)

Régis
Avatar
Marc Boyer
Regis Ramillien wrote:
Bonjour a tous,

Je poste sur ce newsgroup car j'ai un bug bizarre dans une de mes classes,
et je ne comprend pas pourquoi.
J'espere que vous pourrez m'aider...

J'ai un programme utilisant une librairie que j'ai créé qui fonctionnait
correctement jusqu'a maintenant.
J'ai voulu ajouter une variable dans la définition d'une de mes classes, et
je n'y arrive pas, il plante a l'execution, sans meme l'utiliser dans le
.cpp.


As-tu pensé à *tout* recompiler ?

J'ai fait plusieurs essais, et quelque soit le type de la variable, int,
float, objet... avec l'importe quel nom, j'ai un plantage a l'execution à
l'adresse 0x0.


Adresse de donnée ou de code ?

Je comprend vraiment pas, j'enleve un 'int toto', ca fonctionne, je le
remet, ca plante...


Mes hypothèses:
- recompilation partielle uniquement, et donc deux binaires incompatibles
- un code déjà faux, mais qui marchait par malchance, et en changeant
l'alignement et/ou la taille de la classe, une écriture "hors variable"
qui tapait jusqu'à présent dans le vide et qui maintenant tape dans
quelque chose d'utile.

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.

Avatar
Alexandre
bonjour,

Cela dit, j'ai une autre question, du coup, lorsque je met des breakpoints
dans mon programme, le compilo me met des '?' a l'interieur du cercle
rouge
du breakpoint et ne s'y arrete jamais.


à priori c'est parce que le breakpoint est invalide : soit il est impossible
de s'arreter sur la ligne indiquée (par exemple une simple déclaration int i
ne peut servir de breakpoint) soit la ligne indiquée n'est pas compilée (non
utilisée par exemple : cas d'une fonction écrite mais jamais appelée,
etc...).
Quant à ton bug "étrange" je dirais que la vérité est ailleurs ;-)
Vérifies que nulle part dans ton code tu ne fasses de transtypage de ou vers
ton type de classe (si tu changes sa taille...) ou des choses dans le genre.
Tu peux également mettre dans un premier temps des messagebox un peu partout
pour voir à quel moment ça plante si tu n'y arrives pas avec le débogueur.

Je pense que ca vient des paramètres
du projet, mais comme dit plus haut, j'y connait rien, j'ai bien essayé de
gratouiller (de mettre l'option '/debug', de lui donner un nom de fichier
pour la base), mais rien n'y fait...
Si vous pouviez aider un pauvre petit developpeur qui s'y perd...

merci ;)

Régis




Avatar
regis Ramillien
Bon, merci a tous, j'ai trouvé, effectivement, mon code d'origine etait déja
faux...
J'avais un booleen que j'avais oublié d'initialiser et qui me servait a
savoir si ma classe était lancé...
Donc jusqu'a present, il valait 'true' alors qu'en rajoutant une variable
dans une classe dérivée, il valait 'false'...
Merci les messageBox...

Sinon, je peux toujours pas mettre de breakpoints et je sais pas d'ou ca
vient. Personne connait un bon site qui explique tout se qu'on trouve dans
les propriétés d'un projet vs.net?

Merci

Régis