Une application c/C++ lance cette erreur, comment commencer à déboguer (meilleure idée que d'ajouter des instructions d'impression)?L'instruction "<address>" référencé la mémoire à "<address>". La mémoire n'a pas pu être lue."
Répondre
Difficile de suggérer quoi que ce soit, sans le code. Essayez d'utiliser un débogueur et de définir des points d'arrêt dans votre code juste avant d'avoir rencontré le problème.
La deuxième adresse est-elle un très petit nombre, comme 0x00000001 ou 0x00000000? Si c'est le cas, vous avez probablement oublié d'initialiser un pointeur.
Dans tous les cas, des astuces de débogage standard s'appliquent: commencez à isoler le problème en notant quand cela arrive et en réduisant les choses à partir de là.
Petit nombre: initialisé un pointeur sur NULL, jamais assigné une valeur correcte. Nombre aléatoire loin de votre espace d'adressage (en particulier si la plupart ou tous les octets du pointeur sont dans la plage 0x20-0x7f!): Oublié d'initialiser le pointeur, contient des octets d'autres objets. – MSalters
En fonction de votre environnement de développement, un fichier carte pour votre programme peut aider
Le message d'erreur suggère que vous êtes en développement avec Visual Studio. Eh bien, au moins c'est le seul environnement de développement où j'ai vu ce message d'erreur dans ce libellé.
Si tel est le cas, vous pouvez utiliser le débogage d'exception intégré pour intercepter la violation d'accès et obtenir ainsi la pile d'appels. Pour cela dans le VC++ 2003 je suis actuellement ouvert, allez dans Debug-> Exceptions, ouvrez 'Win32 Exceptions', cliquez sur "Violation d'accès c0000005" et réglez "Quand l'exception est levée" sur "Break". dans le débogueur ".
J'ai reçu cette erreur d'un logiciel de marque connue qui s'est écrasé, j'étais sous l'hypothèse que le message venait de Windows. J'ai toujours pensé qu'il était triste de constater que la mémoire ne pouvait pas être "lue" ou "écrite". –
Pourquoi y a-t-il aussi des marques de discours? C'est comme si on essayait de paraphraser ou quelque chose comme ça. – dreamlax
Vous pouvez utiliser GDB pour déboguer votre application: http://www.gnu.org/software/gdb/
Comme d'autres l'ont dit, si cela est reproductible sur votre machine de développement, lancez un débogueur et soit des points d'arrêt/étape ensemble dans le code. Cependant, si cela se produit sur la machine d'un client et qu'un débogueur n'est pas disponible, vous pouvez obtenir les mêmes informations (callstack, registres, etc.) en utilisant SetUnhandledExceptionFilter et en écrivant les informations dans un fichier journal, ou en faisant un minidump. Je suspecte qu'un callstack serait l'endroit de départ le plus utile, ainsi vous pourriez employer une des fonctions de StackWalk dans le gestionnaire et écrire dans un dossier de notation. Cela nécessite au moins un fichier map ou un ensemble de symboles (PDB) pour cette version de l'application.
- 1. distribué la mémoire partagée ou ne pas être?
- 2. La mémoire n'a pas pu être "lu" erreur lors de l'ouverture d'un formulaire VB6 à partir d'une application .Net
- 3. La mémoire libre n'efface pas le bloc de mémoire
- 4. Action <objet, EventArgs> n'a pas pu être converti en EventHandler?
- 5. alternatif rubis à la classe << chose
- 6. UIImagePickerControllerSourceTypeCamera monopolisant la mémoire
- 7. Déchargement de la mémoire
- 8. Comment libérer la mémoire ACTUAL et pas seulement le pointeur vers la mémoire?
- 9. Erreur MSB4062: La tâche "GenerateAndPersistAppInfoTask" n'a pas pu être chargée
- 10. problème addAnnotations (gestion de la mémoire peut-être?)
- 11. Utilisation de la mémoire
- 12. Rational Purify ne saute pas à la mémoire fuit
- 13. Violation d'accès à la mémoire C#
- 14. problème imagecreatefromjpeg avec la mémoire
- 15. À quoi ressemble la mémoire fragmentée?
- 16. Signification des termes liés à la mémoire?
- 17. ICollection <string> à la chaîne []
- 18. Utilisation de la mémoire IronPython
- 19. minuscule gestionnaire de la mémoire
- 20. <% $, <% @, <% =, <% # ... quel est le problème?
- 21. Vue de la mémoire allouée
- 22. gestion de la mémoire java
- 23. Flux C++ vers la mémoire
- 24. Gestion de la mémoire NetBeans
- 25. gestion de la mémoire iphone
- 26. Gestion de la mémoire UITabViewController
- 27. Utilisation de la mémoire SQL
- 28. Problème avec la substitution de "operator <<" dans la classe dérivée de "ostream"
- 29. iPhone gestion de la mémoire
- 30. Limitations de la mémoire .NET
Il n'y a pas de langage appelé "c/C++" ... Pourquoi ne pas simplement spécifier lequel? Si c'est à la fois C et C++ comme l'indiquent vos balises, vous pourriez le dire. – unwind
De quel débogueur es-tu le plus familier? Il est temps de le faire –
peut-être qu'il ne sait pas dans quoi il est écrit. –