Pourquoi pourrais-je obtenir une exception non Gérée violation d'Accès écrit en c++/CLI?
J'ai été struggeling l'écriture d'une solution excisting d'un c++ win32console et d'une dll c++. j'ai enfin réussi à les faire parler sans erreurs d'édition de liens (donc je suis en supposant que les deux sont entièrement gérés c++/CLI projets) mais quand je lance la console, j'obtiens l'erreur suivante.
Exception non gérée à 0x03f71849 dans
De l'entreprise.Pins.Bank.Win32Console.exe:
0xC0000005: violation d'Accès en écriture
emplacement 0x00000001.
La console affiche les informations suivantes
Exception Non Gérée:
Système.NullReferenceException: Objet
de référence non définie à une instance d'un
objet. au wmain dans c:...\win32console.cpp:line
20 à _wmainCRTStartup()
mais je suppose que c'est à cause de l'exception non gérée.
la traque de cette erreur ainsi que je peux l'erreur se produit lorsque vous faites les revenir dans le bloc de code ci-dessous. (la méthode liée par le retour semble étape par amende, une peine lors du retour, il semble aller mal.) Juste au cas où vous ne l'auriez pas remarqué, je n'ai pas écrit le code ci-dessous de moi-même, il a été généré par visual studio.
#ifdef WPRFLAG
int wmainCRTStartup(
#else /* WPRFLAG */
int mainCRTStartup(
#endif /* WPRFLAG */
#endif /* _WINMAIN_ */
void
)
{
/*
* The /GS security cookie must be initialized before any exception
* handling targetting the current image is registered. No function
* using exception handling can be called in the current image until
* after __security_init_cookie has been called.
*/
__security_init_cookie();
return __tmainCRTStartup();
}
#include "stdafx.h"
#include "UInstruction.h"
#define DllExport __declspec(dllexport)
#define DllImport __declspec(dllimport)
using namespace System;
edit: et le win32console.cpp le code est ci-dessous.
//int main(array<System::String ^> ^args)
int _tmain(int argc, _TCHAR* argv[])
{
auto P2 = (TCHAR *)"3 Barrowstead";
TCHAR* P3 = (TCHAR *)"3 Barrowstead";
double* P1;
P1[0] = 13;
UserInstruction(P1, P2, P3);
}
win32console.cpp
?j'ai ajouté le code, mais il ne l'atteint jamais dans les points d'arrêt. cela pourrait signifier que je me suis cassé quelque chose en essayant de le faire fonctionner.
OriginalL'auteur Andy | 2011-05-04
Vous devez vous connecter pour publier un commentaire.
Vous déclarez un pointeur et ne pas initialiser, de sorte qu'il n'a pas de point à un objet (il contient certaines des ordures adresse):
Puis vous essayez d'écrire à chaque fois que cela pointeur non initialisé points:
Vous ne pouvez pas utiliser une variable non initialisée. Vous devez initialiser
P1
à point à un objet avant de déréférencement d'elle.OriginalL'auteur James McNellis
est non initialisée. Vous tentez ensuite de définir sa première entrée à 13. Boom, violation d'accès, ou pour le pire.
L'un de ces fragments de code devrait fonctionner:
ou
ou
OriginalL'auteur Andy Finkenstadt
Les énoncés suivants sont également à tort lors de l'utilisation de l'UNICODE construire:
parce que vous êtes en jetant un normal (char) tableau à un wchar_t pointeur.
si vous construisez avec UNICODE, alors vous devriez changer ces dans:
OriginalL'auteur engf-010
C'est un comportement indéterminé pour convertir une chaîne de caractères littérale à une
TCHAR*
, comme si UNICODE est défini alorsTCHAR*
deviendrawchar_t*
, et un littéral de chaîne n'est pas unwchar_t*
et ce pointeur de conversion n'est pas défini.OriginalL'auteur Puppy
J'ai réussi à trouver l'erreur de la façon suivante:
PIN_PTR
la mémoire.J'ai utilisé les méthodes suivantes pour copier un vecteur:
Le problème a été
PINED_PRT SIZE < unmanagedVectorSize
! Stupide erreur.Ce foiré tous gérés de la mémoire, un expoded couple de lignes & des fonctions plus tard.
Comment vous pouvez trouver dans votre code: Aller disableling plages du code, jusqu'à ce que votre code ne plante pas.
OriginalL'auteur fabio dias