Debug assertion failed
Je garde de la rencontre avec cette "Debug assertions failed!"
d'erreur quand je lance mon programme en mode de débogage. J'ai essayé de regarder cette erreur sur le visual C++, site internet, mais les explications sont trop avancé pour moi et ils n'ont pas de ressemblance avec ce que je crois que le problème est.
J'ai passé au travers de mon code et rétréci vers le bas le point où l'erreur se produit. Il semble être le cas dans la partie du code où je supprimer manuellement tout un tas de tas de tableaux avant que l'ordinateur se déplace sur la partie suivante du programme. Quand j'commentaire la section qui libère de l'ancien tas de tableaux, le programme fonctionne parfaitement bien.
Une idée de ce qui se passe ici? Mes connaissances en programmation est encore relativement basic.
Grâce
Je suis à l'aide de Visual C++ 2008.
Plus d'informations:
Le point de rupture déclenche à ce bloc de code:
void operator delete(
void *pUserData
)
{
_CrtMemBlockHeader * pHead;
RTCCALLBACK(_RTC_Free_hook, (pUserData, 0));
if (pUserData == NULL)
return;
_mlock(_HEAP_LOCK); /* block other threads */
__TRY
/* get a pointer to memory block header */
pHead = pHdr(pUserData);
/* verify block type */
_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));//<---- break point triggers
_free_dbg( pUserData, pHead->nBlockUse );
__FINALLY
_munlock(_HEAP_LOCK); /* release other threads */
__END_TRY_FINALLY
return;
}
Ce code est à partir de l'onglet: dbgdel.cpp
La partie de mon code que j'ai "réduit" qui sont les causes de ce problème est: est-ce
delete [] topQuadanglesPositions;
delete [] fourClamps;
delete [] precaculatedClamp1;
delete [] precaculatedClamp2;
delete [] precaculatedClamp3;
delete [] precaculatedClamp4;
delete [] area;
delete [] hullConfiguration;
delete [] output;
delete [] prunedListClamp1;
delete [] prunedListClamp2;
delete [] prunedListClamp3;
delete [] prunedListClamp4;
delete [] numValidLocations;
Si j'en commentaire de cet article, le programme s'exécute correctement.
défendable. Il peut être plus rapide de retrouver votre new/delete utilisation et de le remplacer que pour déboguer ce que vous avez maintenant. Fait aussi pour faciliter le travail de maintenance de la ligne. Il semble que vous n'êtes pas à risque de casser le code actuel, puisque c'est de corrompre le tas, autant que cela peut être vu à partir de vos données.
La droite. Lorsque vous avez ouvert Debug->Window->de la Pile (ou quelque chose comme ça), puis double-cliquez sur les éléments dans la liste qui s'affiche pour voir comment votre programme de suis arrivé à ce code.
Vous êtes le code est déjà cassé, qu'avez-vous à perdre en le rendant plus propre et mieux? (Et saints, l'enfer c'est trop supprime.)
Mais puisque vous êtes le choix de prendre sur l'inutile fardeau de la gestion de votre mémoire, votre programme est déjà composé de new/delete ruban adhésif d'emballage de la logique métier. La bande de la bande de conduit et de quitter la logique, la vie sera beaucoup plus facile pour vous par la suite. SURTOUT si vous êtes d'apprentissage. C'est maintenant le temps de construire de bonnes habitudes.
OriginalL'auteur Faken | 2010-09-20
Vous devez vous connecter pour publier un commentaire.
Votre code est de corrompre le tas. Le premier extrait est à partir de la bibliothèque runtime C, l'assertion est vous dire que votre programme est en train de passer une mauvaise valeur du pointeur à l'opérateur delete.
En commentant les instructions de suppression cache simplement le problème. Il va revenir vous hanter une manière différente lorsque vous gardez à l'élaboration du programme. Il y a un peu de débogage dans les conseils ce fil. Apprendre à attraper ce genre de bugs est un rite de passage pour toute C ou programmeur C++. Bienvenue dans le groupe.
Grâce à vos conseils, j'ai trouvé le problème. J'ai eu un lien entre deux pointeurs de la même matrice et a tenté de supprimer les données les deux pointeurs souligné, ce qui était bien pour la première supprimer, mais la deuxième fois, a produit l'erreur.
C'était rapide. Félicitations.
OriginalL'auteur Hans Passant
Assertions sont des énoncés qui évaluer uniquement lorsque vous sont en cours d'exécution en mode debug (Bon de débogage de la vérification).
Par exemple, ce serait un échec d'assertion dans le débogage, mais de ne pas provoquer une erreur dans la version:
Il est probable que certains de la méthode que vous appelez s'attend à un certain d'entrée et n'est pas à l'obtenir, mais il ne provoque pas immédiatement une erreur (de Sorte que votre code fonctionne en mode débogage non.)
J'espère que c'est utile.
Si vous pouvez poster votre code, quelqu'un peut probablement vous aider avec une réponse spécifique.
OriginalL'auteur Aaron H.
Affirme se produire lorsque le programme est en état illégales. Affirmer, c'est qui est écrit dans le code par le programmeur lui faire savoir quand quelque chose va mal. Vous devez démarrer le débogage de votre IDE et appuyez sur pause quand vous obtenez message d'assertion. Que vous devriez voir ce qui est la condition à faire valoir, comme
assert(i > 1024)
et assurez-vous que ce n'est jamais vrai. Peut-être que vous avez quelques commentaires au sujet de la signification de l'affirmer, vous devez trouver la ligne où il se passe et pourquoi.OriginalL'auteur watbywbarif