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.

S'il vous plaît, d'être plus précis. "Supprimer un tas de tas de tableaux" n'est pas suffisamment d'informations pour savoir ce qui se passe...
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