[Visual C++ 6]Erreur type:Debug Assertion Failed

Signaler
Messages postés
64
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
5 avril 2007
-
Messages postés
64
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
5 avril 2007
-
Bonjour à tous.

Voilà j'ai deux projets en cours dans vc++. Je tente d'utiliser les
classes de l'un dans l'autre. Séparément, les deux projets fonctionnent
très bien. Mais quand je compile avec l'ajout de la classe tout se
passe bien mais à l'execution, j'ai ça:


Debug Assertion Failed

Program:c:\dev\Debug\GraphAp.exe

File:dbgheap.c

Line:1044



Expression:_CrtIsValidHeapPointer(pUserData)



For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)

--------------------------------------------------------------------

Abandonner Recommencer Ignorer



Alors si quelqu'un a une petite idée d'où ça peut venir en général. Un
paramètre mal réglé? une librairie en trop? enfin je sais pas moi
n'importe quoi.

Merci

17 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Difficile d'avoir une idée avec ca, mais si tu en veux une, je dirais
que tu as un pointeur non valide, et que si tu debug, tu pourra trouver
facilement d'ou ca vient (la ligne qui pose problème en tous cas)
Messages postés
64
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
5 avril 2007

Salut je ne sais pas trop me servir du debug mais j'ai quand même
essayé. Il m'indique une ligne dans un fichier que je n'ai moi même pas
crée. Du coup je ne sais pas trop quoi faire. J'essai de vérifier mes
pointeurs. Mais ce que je ne comprends pas, c'est que cette classe dans
un projet fonctionne sans problème et que dans l'autre il y en ait un.
Pourtant c'est le même fichier que j'ai simplement copié.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
En bas, tu as une pilé d'exécution, qui contient tous les appels. Tu remontes, jusqu'a tomber sur un de tes fichiers.
Messages postés
64
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
5 avril 2007

Excuse moi, mais je ne sais carrément pas manier le debuggeur. Donc je
ne vois même pas de quoi tu parles. Tu pourrai détailler plus stp?
Messages postés
14779
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
4 août 2020
92
En mode débug, tu as (généralement en bas de l'écran) une boite de
dialogue qui affiche tous les appels aux fonctions utilisées sous forme
de pile: la ligne du plantage (dbgheap.c) étant le sommet de pile, tu
trouveras ton code en-dessous, et tu remontera donc à ta fonction qui a
induit ce plantage....


Buno
----------------------------------------
L'urgent est fait, l'impossible est en train de se faire. Pour les miracles, prévoir un délai...
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
pour réprendre le pb à la base,

je pense que tu ferai mieux de mettre tes 2 prog dans le mm prj vc



et de faire un batchbuild à chaque modif

car tes exe ont l'air de se tapper dessus

___________________________________________________________
Magicalement
Nono
Messages postés
64
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
5 avril 2007

bruno: J'ai suivi ce que tu m'indiques mais il ne me renvoit jamais sur
un des mes fichiers. Du coup je ne sais pas du tout d'où ça vient.



Nono: J'importe juste une classe pas un exe, ni un projet en entier. Et
comme j'ai dit la classe ne pose aucun problème dans son projet
d'origine mais dans l'autre ça me donne l'erreur.



D'autres idées parce que là j'en suis à m'arracher les cheveux.
Messages postés
14779
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
4 août 2020
92
Bah euh...là, je ne vois plus que le pas-à-pas avec des points d'arrêt
ou alors la méthode des printf pour cerner la fonction qui merde

Buno
----------------------------------------
L'urgent est fait, l'impossible est en train de se faire. Pour les miracles, prévoir un délai...
Messages postés
64
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
5 avril 2007

Le pire dans cette histoire c'est que je ne déclare même pas un objet de la classe.

Je ne fais qu'inclure le .h dans l'autre projet et rajouter les
fichiers et c'est tout. ça compile mais ça foire au lancement. et c'est
ce que je ne comprend pas.

Comment peut elle causer une erreur ici alors qu'il n'y a même pas
d'objet déclaré et ne pas en causer dans un autre projet qui est basé
dessus (donc avec plein d'objets de cette classe dedans!!)??????
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
test à faire pour voir si tu n'as pas de pb de recouvrement





met l'ensemble de tes trucs communs dans un espace de nom

(namespace)

ça peut etre une idée...





sinon, je fais ça sans arret d'utiliser des fichiers sources identiques
pour plusieurs fichiers (les Bxxx pour ceux qui en ont déjà entendu
parler ;) )

et n'ai jamais eu ce pb.

___________________________________________________________
Magicalement
Nono
Messages postés
64
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
5 avril 2007

Nono j'aimerai bien tester ta solution mais je ne sais pas trop comment faire.



Par contre des fois le compilateur m'envoie un warning avec indiquant
un conflit possible avec une librairie et me conseille d'utiliser
/NODEFAULTLIB je ne dois pas bien le placer ce truc parce que le
warning reste.

Si quelqu'un peut me dire exactement où le mettre.

Merci
Messages postés
64
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
5 avril 2007

Je viens de constater quelque chose, j'ai essayé d'inclue une autre
classe mais semblable à la mienne. Je l'ai récupéré sur le site. Et
bien j'obtiens exactement la même erreur comme si c'était indépendant
de la classe en fait.

Donc je me demande quel est le mécanisme qui révèle une erreur en incluant une classe au projet?
Messages postés
64
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
5 avril 2007

Euh même sans faire #include "laclasse.h" ça fait l'erreur. juste en rajoutant les fichiers dans les dossiers du projet.

Help please!!!
Messages postés
64
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
5 avril 2007

euh....


je vous fais par de ma découverte parce que là moi j'hallucine.


J'ai tenté de réduire le code de mon projet jusqu'à ce que l'erreur disparaisse pour reconnaitre le pointeur incriminé.


Voilà ce que j'ai obtenu:


Le .h



Code:, ----

#ifndef GraphAp

#define GraphAp

#include "wx/wxprec.h"

#ifndef WX_PRECOMP

#include "wx/wx.h"

#endif

class MyApp:public wxApp

{

public:

virtual bool OnInit();

};

class MyFrame:public wxFrame

{

public:

MyFrame(const wxString & title, const wxPoint & pos, const wxSize & size, long style);

};

#endif








le .cpp



Code:, ----

#include "GraphAp.h"

IMPLEMENT_APP(MyApp)

bool MyApp::OnInit()

{

return true;

}

MyFrame::MyFrame(const wxString & title, const wxPoint & pos,
const wxSize & size, long
style):wxFrame(NULL,-1,title,pos,size,style)

{

}







Voilà l'INTéGRALITé du code du projet. Qui se compile et se lance.
(y'a rien qui s'affiche mais le processus est visible dans le
gestionnaire).




Et dès que je rajoute le .h et le .cpp d'une classe quelconque dans
les dossiers du projet j'ibtiens la superbe erreur décrite plus haut.


Je ne fais rien de plus, juste les ajouter dans les dossiers.





Alors franchement il faudrait que quelqu'un m'explique svp.




De plus que je rajoute /NODEFAULTLIB ou /NODEFAULTLIB:library dans
les options du preprocesseur, j'ai toujours ce warning quand je compile
avec les fichiers de l'autre classe rajoutés:



Code:, ----

LINK : warning LNK4098: defaultlib "MSVCRT" conflicts with use of other libs; use /NODEFAULTLIB:library








voilà j'aimerai comprendre svp.
Messages postés
64
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
5 avril 2007

Voici la liste des appels fournit par le debuggeur:


NTDLL! 7c911230()

NTDLL! 7c97cd80()

NTDLL! 7c970af8()

KERNEL32! 7c85e7af()

_CrtIsValidHeapPointer(const void * 0x00354fb8) line 1697

_free_dbg_lk(void * 0x00354fb8, int 1) line 1044 + 9 bytes

_free_dbg(void * 0x00354fb8, int 1) line 1001 + 13 bytes

free(void * 0x00354fb8) line 956 + 11 bytes

wxListKey::~wxListKey() line 381 + 15 bytes

wxListBase::Append(const char * 0x00758990, void * 0x007b8d58 class wxClassInfo wxEvtHandler::ms_classInfo) line 273

wxObjectList::Append(const char * 0x00758990, void * 0x007b8d58 class
wxClassInfo wxEvtHandler::ms_classInfo) line 1124 + 30 bytes

wxHashTable::Put(const char * 0x00758990, wxObject * 0x007b8d58 class wxClassInfo wxEvtHandler::ms_classInfo) line 485

wxClassInfo::Register() line 242

wxClassInfo::wxClassInfo(const char * 0x00758990, const wxClassInfo *
0x007b8d88 class wxClassInfo wxObject::ms_classInfo, const wxClassInfo
* 0x00000000, int 40, wxObject * (void)* 0x00406512
wxEvtHandler::wxCreateObject(void)) line 77

$E30() line 66 + 32 bytes

$E34() + 8 bytes

_initterm(void (void)* * 0x00757120 $S35, void (void)* * 0x00757c38 ___xc_z) line 525

WinMainCRTStartup() line 274 + 15 bytes

KERNEL32! 7c816d4f()
Messages postés
14779
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
4 août 2020
92
Salut!

C'est la première fois que tu utilises wxWidgets? Parce qu'il y a une
manip à faire pour dans les options de Visual avant de pouvoir
l'utiliser...

Regarde là: http://www.cppfrance.com/code.aspx?ID=28938

En espérant que cela puisse t'aider...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en train de se faire. Pour les miracles, prévoir un délai...
Messages postés
64
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
5 avril 2007

Je te remercie,mais ça n'a pas réglé mon problème. Toute fois sache que
l'application wxWidgets se compile parfaitement toute seule.

Alors pour simplifier la tache, j'ai fait des tests et j'en suis venu à ça. Voici les fichiers de l'application wxWidgets:

.h




#ifndef GraphAp



#define GraphAp



#include "wx/wxprec.h"



#ifndef WX_PRECOMP



#include "wx/wx.h"



#endif





class MyApp:public wxApp



{



public:



virtual bool OnInit();



};



#endif









.cpp




#include "GraphAp.h"





IMPLEMENT_APP(MyApp)





bool MyApp::OnInit()



{



return true;



}












Et voici les fichiers de la classe que je rajoute aux dossiers:



.h




#include





#ifndef MPTEST_H



#define MPTEST_H





class Mptest:public ID3_Tag



{



public:



Mptest();



~Mptest();



};



#endif









.cpp




#include "Mptest.h"





Mptest::Mptest()



{



}





Mptest::~Mptest()



{



}






Donc voilà avec ces fichiers là j'obtiens la fameuse erreur à l'execution du programme (compilation sans soucis):




Debug Assertion Failed



Program:c:\dev\Debug\GraphAp.exe



File:dbgheap.c



Line:1044





Expression:_CrtIsValidHeapPointer(pUserData)





For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.



(Press Retry to debug the application)



--------------------------------------------------------------------



Abandonner Recommencer Ignorer




Sachant que le debuggeur ne me renvoie à aucun
des 4 fichiers et que chaque couple de fichiers fonctionne parfaitement
séparement.



Quelqu'un peut il m'aider?