[VISUAL C++]Difference entre Release/Debug

Difference entre Release/Debug [VISUAL C++] - C++ - Programmation

Marsh Posté le 28-10-2002 à 17:58:11    

Sur un Visual C++ 6 sans service pack,
je compile un programme en C...
a un moment, un malloc est fait sur une zone de taille variable (fonction des données d'un fichier)
 
ptr = malloc(sizeof(mastruct)*nb_struct);
 
en mode debug, il n'y aucun probleme quelque soit la taille demandée
en mode release, le malloc fonctionne pour toute taille<4096octets
 
et plante a l'execution quand il faut plus de 4096octets
---> un popup windows avec la memoire ne peut etre written
     "l'instruction 0x37adfcdd ne peut écrire la zone 0x000000"
 
     l'erreur me parait logique (ecrire a l'adr 0, c'est pas top)
 
     mais plutot pourquoi cette erreur lorsqu'il y a plus de 4Ko a alloué en mode release
 
 

Reply

Marsh Posté le 28-10-2002 à 17:58:11   

Reply

Marsh Posté le 28-10-2002 à 20:55:26    

UP UP UP

Reply

Marsh Posté le 28-10-2002 à 21:19:17    

Selon moi tu dois essayer d'écrire en dehors de la mémoire que tu as réservé.
En mode Debug, le compilateur réserve une marge de sécurité (afin d'éviter ce genre d'erreur et les indiquer) alors que cette marge n'existe plus en mode Release.
Vérifie donc bien qu'il n'y a pas un endroit où tu écris là où tu ne devrais pas.
 
Si tu veux plus d'infos sur la différence entre Release et Debug, tu peux aller voir cet article.


---------------
each day I don't die is cheating
Reply

Marsh Posté le 28-10-2002 à 21:21:41    

ca plante sur le malloc, il n'y aucune tentative d'ecriture a cet endroit la...

Reply

Marsh Posté le 28-10-2002 à 21:36:43    

installe le service pack  :??:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 29-10-2002 à 01:17:46    

Il n'y a aucune raison...
4096 octets, c'est 4 Ko, la taille des pages mémoires de Windows.
 
1) Si tu peut choper un service pack, c'est bien. Indispensable dirais-je.
2) Tu es vraiment sûr de la taille demandée ?


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 29-10-2002 à 01:58:37    

djok_fb a écrit a écrit :

ca plante sur le malloc, il n'y aucune tentative d'ecriture a cet endroit la...




 
on est en C, donc ca peut planter n'importe ou si il y a une ecriture/lecture a un emplacement invalide.
 
tu dis que tu as une popup mais a-t-elle lieu lors du malloc?
Ton programme ne fait qu'un malloc ou il y a d'autres instructions?
 
Bref reexamine ton code, l'erreur peut-etre n'importe ou, lance ton programme dans le debogueur pour voir ou a lieu l'acces illegal.
 
LeGreg

Reply

Marsh Posté le 29-10-2002 à 08:39:26    

je debugge a l'ancienne avant le malloc, j'ai un printf("coucou0\n" ); et apres le malloc j'ai un printf("coucou1\n" );
j'ai bien le coucou0 mais pas le coucou1, a la place j'ai un message d'erreur windows 2000...
 
je suis en train d'installé le service pack 5 sur ce poste
 
ce qui est bizarre, c'est que les memes sources sur un autre pc avec le même Visual mais pas la même version des librairies oracle installé fonctionne correctement(depuis 3 ans) dans les 2 modes...
 
c'est juste pour une migration oracle (passage de 8i tout court a 8i 4.1) que ca merde...

Reply

Marsh Posté le 29-10-2002 à 09:15:16    

apres install du SP5, ca change rien...
je vais me tirer une balle de souris dans la tete ;)

Reply

Marsh Posté le 29-10-2002 à 11:15:05    

:up: :up:

Reply

Marsh Posté le 29-10-2002 à 11:15:05   

Reply

Marsh Posté le 29-10-2002 à 15:02:36    

coin???

Reply

Marsh Posté le 31-10-2002 à 02:49:21    

Au plus probable: Écrasement de mémoire masqué par le padding du mode debug.
 
http://www.codeproject.com/debug/releasemode.asp Debugging Release Mode Problems
http://www.codeproject.com/debug/survivereleasever.asp Surviving the Release Version
C'est tout ce que je peut faire pour toi.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 31-10-2002 à 04:53:28    

Il n'y a aucune raison "particuliere" pour qu'un malloc de 4 ko fasse planter ton programme mais plein de raisons possibles et assez vagues vu le contexte que tu nous fournis.
Tu parles de lib oracle. Essaie de voir s'il n'y a pas des mises a jour ou des differences notables mises en avant dans la doc d'une lib a l'autre. traine sur les forums Oracle..
 
Passe egalement a des outils de debogage un peu plus efficace
que printf, parce que si tu programmes sur Oracle ce n'est pas pour faire style je programme comme un debutant..  
 
Il y a aussi des outils encore plus evolues comme purify ou PC-Lint.. Ou demande de l'aide dans ta boite?
 
Peut difficilement faire plus avec les infos qu'on a..
 
LeGreg

Reply

Marsh Posté le 08-11-2002 à 15:13:10    

en fait, le contexte est le suivant:
 
un programme utilisé depuis plusieurs années chez mon client, programmé en Pro*C et en C sous Visual Studio et tournant sur Windows NT 4 et Oracle 7, doit etre migré sur une plateforme Windows 2000 et Oracle 8i patch 4.1...
 
Le temps que j'ai une plateforme patchée en 4.1...j'ai compilé sur une plateforme Windows 2000 et Oracle 8i + patch spécifique (sur un bug d'oracle 8i que j'avais trouvé par malchance <-- 3 mois pour avoir un correctif) (NB: le patch 4.1 contient ce patch spécifique)...
cette version compilée fonctionne parfaitement...en release comme en debug...
 
je prends donc mon source et le compile sur ma nouvelle machine en 8i 4.1, et c'est la qu'intervient mon problème, en release, ca ne fonctionne pas...
 
mon premier soupçon s'est porté sur le patch 4.1 d'Oracle, l'administratrice oracle m'a indiqué que le patch 4.1 modifiait grandement le Pro*C...je lui ai donc dit que le problème venait surement de la, mais elle ne veut pas savoir...et m'a donc demandé d'etudier le problème est de voir où ca merde...(d'ou la question sur ce forum, pour voir ca pouvait arriver)
mais je reste persuadé que cela provient du patch 4.1 et de ces "corrections" du précompilateur Pro*C
 
les machines de compilation sont identiques avec le même environnement excepté ce fameux patch d'Oracle 8i...

Reply

Marsh Posté le 08-11-2002 à 15:14:31    

PS: pour le printf, j'aimerai bien pouvoir utiliser autre chose...mais je peux pas...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed