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

  FORUM HardWare.fr
  Programmation
  C++

  Le mystère du mode debug sous dev c++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Le mystère du mode debug sous dev c++

n°1299076
Mad_Wookie​e
Posté le 04-02-2006 à 16:18:08  profilanswer
 

Bonjour les gens, c'est mon premier post sur ce forum, j'espère ne pas avoir sauter LE sujet qui m'aurait dépanné ^^
 
Je vous présente donc mon projet : il s'agit d'un moteur 3d openGL sous windows, développé sous devc++
le but actuel de mon code est de charger un fichier .3DS, puis de l'afficher en couleur unie dans la fenêtre opengl, et permettre de tourner autour avec la souris. en plus de l'affichage 3d, et une "interface" (pour l'instant qq rectangle) vient se greffer en transparence au dessus de cette vue 3d.
 
jusque là, rien de bien compliqué (quoique le code commence à être impressionnant), et tout fonctionnait jusqu'alors.
 
Et maintenant, le drame : après de multiple modification (haaaan il a pas noté les modifications qu'il a faites, spabieeeeen) le problème suivant arrive :  
 
-lors de la compilation du code : aucune erreur.
-lancement de l'application : le fichier 3DS est chargé (confirmation de lecture du fichier dans une fenêtre dos), mais pas affiché. pourtant l'interface en transparence est bien affichée. on pourrait pensé que j'ai bêtement effacé la ligne qui permet d'afficher le modèle chargé mais...
-lancement de l'application en mode debug : tout est à sa place.  :ouch:  Oui, l'interface, le modèle 3DS, tout es affiché.
 
Pour conclure : est-ce que qqn a une idée de l'endroit où j'ai merdé ? Que puis-je vous donner comme informations pour vous aider ?

mood
Publicité
Posté le 04-02-2006 à 16:18:08  profilanswer
 

n°1299147
Taz
bisounours-codeur
Posté le 04-02-2006 à 19:54:05  profilanswer
 

t'as du code complètement pourri qui se comporte pas pareil en debug et release.

n°1299166
olivthill
Posté le 04-02-2006 à 21:24:35  profilanswer
 

Avec dev-C++ comme avec Visual C++ ou d'autres compilateur, la cause la plus courante qui fait qu'un programme marche en debug et plante en mode release est l'absence ou la mauvaise intialisation d'espace mémoire.
 
En effet, la plupart du temps, en mode debug, le debugger met à zéro la mémoire avant d'exécuter le programme, alors qu'en mode release la mémoire peut contenir tout et n'importe quoi.
 
Il arrive que les programmeurs pensent à tort, qu'en C/C++ la mémoire est initialisée implicitement comme ça l'est en basic. Ou bien une faute d'inattention fait qu'on initialise toto1, alors qu'il faut initialiser toto2. Ou bien on oublie qu'il faut que les chaines de charactères se terminent par un caractère nul. Ou bien, on croit à tort que sizeof() renvoie toujours la bonne taille, alors que ce n'est le cas que dans des conditions particulières. Etc.
 
Il faudrait voir le programme pour détecter ce qui ne va pas.

n°1299315
skelter
Posté le 05-02-2006 à 14:08:39  profilanswer
 

olivthill a écrit :

on croit à tort que sizeof() renvoie toujours la bonne taille, alors que ce n'est le cas que dans des conditions particulières. Etc.


 
qu'est ce que tu veux dire ?

n°1299321
Taz
bisounours-codeur
Posté le 05-02-2006 à 14:26:03  profilanswer
 

que soit on connait l'opérateur sizeof, soit pas.

n°1299322
skelter
Posté le 05-02-2006 à 14:30:52  profilanswer
 

en effet, c'est ce que j'ai compris

n°1299324
chrisbk
-
Posté le 05-02-2006 à 14:37:41  profilanswer
 

olivthill a écrit :


En effet, la plupart du temps, en mode debug, le debugger met à zéro la mémoire avant d'exécuter le programme, alors qu'en mode release la mémoire peut contenir tout et n'importe quoi.


 
a 0, non, ca serait une grave erreur de la part du compilo (IMHO) generalement y mettent plus des valeurs alacon genre 0xcd

n°1299340
olivthill
Posté le 05-02-2006 à 15:44:16  profilanswer
 

Citation :

Citation :

on croit à tort que sizeof() renvoie toujours la bonne taille, alors que ce n'est le cas que dans des conditions particulières. Etc.


qu'est ce que tu veux dire ?


sizeof() peut parfois prêter à confusion.
 
Par exemple, sizeof() est différent de strlen() pour plusieurs raisons dont une qui est que sizeof renvoie une taille qui est calculée lors de la compilation et non pas lors de l'exécution du programme.
 
Autre exemple, en fonction du contexte, sizeof() peut renvoyer soit la taille d'une chaine de caractères, soit la taille du pointeur sur une chaine de caractères, voir le code ci-dessous, ou sizeof() renvoie 4 ou 100.

void print_sizeof_in_sub(char s[100])
{
   printf("sizeof(s)=%d.", sizeof(s));
   // "sizeof(s)=4."
}
 
int main(void)
{
   char s[100];
   printf("sizeof(s)=%d.", sizeof(s));
   // "sizeof(s)=100."
 
   print_sizeof_in_sub(s);
   exit(0);
}

n°1299346
skelter
Posté le 05-02-2006 à 16:12:06  profilanswer
 

Citation :


Par exemple, sizeof() est différent de strlen() pour plusieurs raisons dont une qui est que sizeof renvoie une taille qui est calculée lors de la compilation et non pas lors de l'exécution du programme.


 
sizeof renvoi la taille du type d'un identifeur ou d'un type, c'est opérateur du langage et c'est résolu statiquement ('sizeof x' est une expression constante). Une chaine litterale est de type tableau de char (comme un identifieur de type tableau c'est l'adresse de sont premier element), donc aucune confusion car sizeof renvoi bien la taille du tableau
 

Citation :

Autre exemple, en fonction du contexte, sizeof() peut renvoyer soit la taille d'une chaine de caractères, soit la taille du pointeur sur une chaine de caractères, voir le code ci-dessous, ou sizeof() renvoie 4 ou 100.


 
tu vois tu n'as pas vraiment compris ce que retourne sizeof, la encore pas de confusion, dans le main s est de type tableau de 100 char donc sizeof renvoi 100, dans la fonction s est de type pointeur de char qui au moment de l'appel pourra se voir affecter l'adresse d'un tableau de char (en c++ on ne peut pas passer de tableau par valeur) donc sizeof retourne la taille du pointeur
par contre si tu avais passer le tableau par référence sizeof aurait retourné 100...
 
d'ailleur tu ecris

Code :
  1. void print_sizeof_in_sub(char s[100])


et c'est peut etre pour ca que c'est confus pour toi, en réalité ce prototype est strictement équivalent à

Code :
  1. void print_sizeof_in_sub(char s[])


et à

Code :
  1. void print_sizeof_in_sub(char *s)


n°1299417
Mad_Wookie​e
Posté le 05-02-2006 à 18:36:06  profilanswer
 

hé bien je vous remercie, pour ces remarques, surtout olivthill... je vais vérifier mes réservations et libérations mémoire.
 
Par contre Taz, merci, je me doutes que mon code chie qqpart ;)  


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

  Le mystère du mode debug sous dev c++

 

Sujets relatifs
fopen() et mode r+(Shell) [VIM] déplacement du curseur en mode insertion
Debug Assertion Failed ! File: dbgheap.ctracer une droite en mode video 13h
[turbo pascal] readkey et mode graphiquePiloter le lecteur de disquette en mode protégé
[RESOLU][SED] Modifier une chaine avec un caractère mystèreEspion du flux DEBUG
Mode texte et question sur les socket.c'est un vrai mystère !!! comprends pas !!
Plus de sujets relatifs à : Le mystère du mode debug sous dev c++


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