programme marche en mode normal mais pas en mode debug - C - Programmation
Marsh Posté le 26-02-2009 à 11:00:37
plantage dans de l'allocation dynamique de mémoire, accés à de la mémoire non allouée. Montre du code sinon on pourra rien dire
Marsh Posté le 26-02-2009 à 11:09:12
Ça pue l'utilisation d'un pointeur non-initialisé qui "fonctionne" par coup de bol en mode optimisé parce qu'il y a quelque chose dedans qui correspond vaguement à une adresse (de façon aléatoire), mais qui en mode debug est initialisé à 0, donc NULL, donc segfault.
Marsh Posté le 26-02-2009 à 11:12:18
Joel F a écrit : plantage dans de l'allocation dynamique de mémoire, accés à de la mémoire non allouée. Montre du code sinon on pourra rien dire |
Merci de la réponse.
En fait, il se trouve que le code du projet est très important. Il est difficile de montrer du code pertinent.
Je voulais savoir s'il y avait des choses à savoir sur la configuration d'un debugger ou si le fait de réinstaller Visual C++ pouvait changer quelque chose.
Mais d'après toi le problème vient du code, donc je vais rectifier ça
Merci
Marsh Posté le 26-02-2009 à 11:16:15
Elmoricq a écrit : Ça pue l'utilisation d'un pointeur non-initialisé qui "fonctionne" par coup de bol en mode optimisé parce qu'il y a quelque chose dedans qui correspond vaguement à une adresse (de façon aléatoire), mais qui en mode debug est initialisé à 0, donc NULL, donc segfault. |
Ok. Je ne pensais pas qu'il y avait une différence entre l'exécution en mode debug et celle en mode normal.
Effectivement, le coup du pointeur mal initialisé est plus que probable.
Merci pour la réponse
Marsh Posté le 26-02-2009 à 11:16:40
Faut utiliser le debugger jusqu'à l'endroit du plantage et examiner les variables. Du travail de fourmi mais si tu n'as pas d'outils type purify ou insure++ ou autre, il n'y a que comme ça que tu arriveras à tracer le problème.
En tout cas, ce n'est pas un problème de compilation ou de debugger, c'est typiquement un souci de gestion mémoire.
Marsh Posté le 26-02-2009 à 11:17:14
pseupseu a écrit : Ok. Je ne pensais pas qu'il y avait une différence entre l'exécution en mode debug et celle en mode normal. Merci pour la réponse |
Disons que le mode debug initialise toutes les variables à 0 tout le temps, pour permettre justement de tracer plus facilement l'utilisation de pointeurs non-initialisés. En tout cas si je rencontrais ce problème c'est d'abord de ce côté que je chercherais.
Marsh Posté le 26-02-2009 à 11:28:10
Elmoricq a écrit : |
Bon à savoir
Merci
Marsh Posté le 26-02-2009 à 14:22:05
Bonjour à tous,
J'ai eu d'autres éléments de réponse que je me permets de vous communiquer
http://www.developpez.net/forums/d [...] ode-debug/
En vous remerciant et en vous souhaitant une bonne journée
Marsh Posté le 05-03-2009 à 12:51:05
Bonjour à tous,
Je me permets de vous donner le fin mot de l'histoire de mon problème.
Il y avait beaucoup de zones mémoire allouées et non initialisées. En mode debug ces zones étaient initialisée à 0xcccccccc alors qu'en mode normal elles étaient initialisées à 0x00000000.
Merci et bonne journée
Marsh Posté le 26-02-2009 à 10:38:42
Bonjour à tous,
Je développe en C sous Visual C++.
J'ai un problème de taille : lorsque j'exécute mon programme en mode normal, ça fonctionne mais lorsque je passe en mode debug, Visual C++ bloque puis le debugger s'arrête d'un coup.
En général, lorsque ça plante, le debugger ne s'éteint jamais comme ça.
Est-ce quelqu'un a déjà eu ce problème ?
Merci de votre réponse