Il y a une erreur commune qui est lancée par le Runtime Visual C :
Cette application a demandé au Runtime de la terminer d'une manière inhabituelle.
Veuillez contacter l'équipe d'assistance de l'application pour plus d'informations.
Que signifie réellement ce message d'erreur moyenne ?
Laissez-moi utiliser une parabole pour expliquer exactement ce que je demande.
Si je vois un message :
Exception : violation d'accès (0xc0000005), Adresse 0x702be865
Ce site violation de l'accès n'a rien à voir avec le harcèlement sexuel, ni avec le fait que quelqu'un essaie de pénétrer dans mon ordinateur (pas plus que le général Failure n'était un général de brigade qui essayait de lire mon disque C, ou que vous pouviez être traîné en prison pour avoir effectué une opération illégale dans Windows 95).
Dans ce cas, violation de l'accès correspond à la constante EXCEPTION_ACCESS_VIOLATION
(déclaré dans winbase.h
avec la valeur 0xC0000005). Cette constante est un code d'erreur d'exception possible qui peut être renvoyé dans un message de type EXCEPTION_RECORD
structure. Le code ACCESS_VIOLATION
signifie que le programme a essayé de lire ou d'écrire à une adresse en mémoire qu'il ne devrait pas avoir. Si vous essayez de lire une adresse mémoire qui n'a jamais été allouée, vous faites quelque chose d'horriblement mauvais - et l'exception vous le dit.
Il est généralement Elle est provoquée lorsqu'un programme dispose d'un pointeur vers une mémoire qui n'est pas, ou plus, valide. La solution est d'arrêter d'essayer d'accéder à la mémoire qui n'est pas valide.
Nota : Je suis no demandant :
- pourquoi le programme x Vous obtenez une erreur C0000005 ?
- pourquoi mon code obtient-il une violation d'accès ?
- comment déboguer une violation d'accès ?
Donc si je te demandais, ce qui cause une violation d'accès vous ne me diriez pas de vérifier la trace de la pile, ou de regarder la fenêtre de sortie, ou de poster un exemple de code. Vous diriez, "C'est en essayant d'accéder à une mémoire qui n'est pas valide."
Retour à ma question
Que signifie l'erreur suivante :
Cette application a demandé au Runtime de se terminer d'une manière inhabituelle.
Je suis (presque) certain que la bibliothèque du moteur d'exécution Visual C de Microsoft n'a pas de fonction :
void TerminateRuntime(bool UnusualWay);
Je dois donc essayer de comprendre ce que cela signifie réellement :
- Qu'est-ce que cela signifie résilier la bibliothèque d'exécution de Visual C ? (msvcrt est une dll ; vous ne la terminez pas, vous ne l'utilisez simplement plus).
- Qu'est-ce qui serait habituel manière de mettre fin à MSVCRT ?
- Est-ce que quelqu'un choisissez pour le terminer dans un inhabituel Comment ?
- Est-ce que le inhabituel est en fait une forme dépréciée depuis longtemps de ce qui était autrefois le habituel Comment ?
- Si je était (par erreur) en le terminant d'une manière inhabituelle, que dois-je faire pour le terminer dans la bonne direction ? habituel Comment ?
En d'autres termes, quelle erreur le MSVCRT détecte-t-il et cache-t-il derrière le message d'erreur non informatif ?
0 votes
Lorsque le message dit "Terminer", cela signifie "terminer l'application", et non "terminer le runtime". Je n'ai pas trouvé de documentation sur MSDN, mais ce message a été mentionné dans un certain nombre de fils de discussion : le consensus semble être qu'il signifie qu'une exception a été levée et n'a jamais été attrapée.
5 votes
Cette question est tellement bien écrite que je la voterais et l'étoilerais même si je ne la trouvais pas utile. En particulier, j'aime votre proposition de déclaration pour
TerminateRuntime
. (J'ai pris la liberté de nettoyer quelques petites choses comme les majuscules ; je suis impressionné par le fait que cela soit aussi complet et bien écrit sans une seule édition (non-Ninja) avant la mienne).