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

  FORUM HardWare.fr
  Programmation
  C++

  [VISUAL C++]Difference entre Release/Debug

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VISUAL C++]Difference entre Release/Debug

n°236081
djok_fb
C'était mieux avant!
Posté le 28-10-2002 à 17:58:11  profilanswer
 

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
 
 

mood
Publicité
Posté le 28-10-2002 à 17:58:11  profilanswer
 

n°236171
djok_fb
C'était mieux avant!
Posté le 28-10-2002 à 20:55:26  profilanswer
 

UP UP UP

n°236187
gatorette
Posté le 28-10-2002 à 21:19:17  profilanswer
 

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
n°236188
djok_fb
C'était mieux avant!
Posté le 28-10-2002 à 21:21:41  profilanswer
 

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

n°236204
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 28-10-2002 à 21:36:43  profilanswer
 

installe le service pack  :??:


---------------
J'ai un string dans l'array (Paris Hilton)
n°236313
Musaran
Cerveaulté
Posté le 29-10-2002 à 01:17:46  profilanswer
 

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
n°236344
LeGreg
Posté le 29-10-2002 à 01:58:37  profilanswer
 

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

n°236392
djok_fb
C'était mieux avant!
Posté le 29-10-2002 à 08:39:26  profilanswer
 

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...

n°236400
djok_fb
C'était mieux avant!
Posté le 29-10-2002 à 09:15:16  profilanswer
 

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

n°236470
djok_fb
C'était mieux avant!
Posté le 29-10-2002 à 11:15:05  profilanswer
 

:up: :up:

mood
Publicité
Posté le 29-10-2002 à 11:15:05  profilanswer
 

n°236613
djok_fb
C'était mieux avant!
Posté le 29-10-2002 à 15:02:36  profilanswer
 

coin???

n°237686
Musaran
Cerveaulté
Posté le 31-10-2002 à 02:49:21  profilanswer
 

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
n°237697
LeGreg
Posté le 31-10-2002 à 04:53:28  profilanswer
 

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

n°241790
djok_fb
C'était mieux avant!
Posté le 08-11-2002 à 15:13:10  profilanswer
 

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...

n°241791
djok_fb
C'était mieux avant!
Posté le 08-11-2002 à 15:14:31  profilanswer
 

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


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

  [VISUAL C++]Difference entre Release/Debug

 

Sujets relatifs
[Visual C++] TabControl dans la vue graphique =>en dessous, plus rien![C++] COM: une différence entre NT4 et 2k/XP??
[VISUAL] mise en page pour imprimer un documentVisual C++6 de wrox il est bien ce bouquin ?
visual c++ : comment faire appel à un fichier .h ?[Visual Basic]: Besoin d'un peu d'aide pour un programme à l'école.
[C] Problème de libération mémoire \Visual C++Différence entre INNER, JOIN, LEFT, RIGHT.....etc
Différence entre C++ et Visual C++ 
Plus de sujets relatifs à : [VISUAL C++]Difference entre Release/Debug


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