Je suis en utilisant Visual Studio 2010.C++ std :: string Paramètre <Bad Ptr>
J'ai une classe avec le constructeur suivant:
CVideoAnnotation::CVideoAnnotation(std::string aPort, DWORD aBaudRate)
Je crée une instance de CVideoAnnotation comme suit:
CVideoAnnotation cVideoAnnotation("COM3", CBR_9600);
'CBR_9600' est une macro qui décide de 9600.
vers le bas dans la con structor, aBaudRate est 9600 comme prévu. Cependant, aPort n'est pas transmis correctement. Lorsque je passe le curseur dessus, IntelliSense donne une valeur de <Bad Ptr>
.
Est-ce que quelqu'un a des idées sur pourquoi la chaîne ne passe pas correctement?
Merci, Dave
Comme une mise à jour à ma question initiale, j'ajoute le code de montage pour l'appel du constructeur et la population de la population locale une fois à l'intérieur du constructeur.
CVideoAnnotation cVideoAnnotation("COM3", CBR_9600);
0041177D push 2580h
00411782 sub esp,20h
00411785 mov ecx,esp
00411787 mov dword ptr [ebp-174h],esp
0041178D push offset string "COM3" (4198C8h)
00411792 call std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> > (41131Bh)
00411797 mov dword ptr [ebp-17Ch],eax
0041179D lea ecx,[ebp-11h]
004117A0 call dword ptr [__imp_CVideoAnnotation::CVideoAnnotation (41D4DCh)]
004117A6 mov dword ptr [ebp-180h],eax
004117AC mov dword ptr [ebp-4],0
CVideoAnnotation::CVideoAnnotation(std::string aPort, DWORD aBaudRate)
{
100137F0 push ebp
100137F1 mov ebp,esp
100137F3 push 0FFFFFFFFh
100137F5 push offset [email protected]@[email protected][email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected] (1001DC82h)
100137FA mov eax,dword ptr fs:[00000000h]
10013800 push eax
10013801 sub esp,164h
10013807 push ebx
10013808 push esi
10013809 push edi
1001380A push ecx
1001380B lea edi,[ebp-170h]
10013811 mov ecx,59h
10013816 mov eax,0CCCCCCCCh
1001381B rep stos dword ptr es:[edi]
1001381D pop ecx
1001381E mov eax,dword ptr [___security_cookie (10026090h)]
10013823 xor eax,ebp
10013825 mov dword ptr [ebp-10h],eax
10013828 push eax
10013829 lea eax,[ebp-0Ch]
1001382C mov dword ptr fs:[00000000h],eax
10013832 mov dword ptr [ebp-18h],ecx
10013835 mov dword ptr [ebp-84h],0
1001383F mov dword ptr [ebp-4],0
Je ne vois aucun pointeur explicite dans votre code, il est donc possible que vous corrompiez la pile quelque part. – casablanca
Je m'étais demandé à ce sujet; Cependant, la toute première chose qui se passe dans _tmain() est la construction CVideoAnnotation montrée dans mon post original. (_tmain() est le point d'entrée pour une application de console Windows avec un en-tête précompilé.) Avant cela, stdafx.h, iostream, conio.h et VideoAnnotation.h sont inclus. À son tour, le fait VideoAnnotation.h: #pragma une fois #include #define WIN32_LEAN_AND_MEAN #include #ifdef EXPORTING_DLL #define DECL_DLL __declspec (dllexport) #else #define DECL_DLL __declspec (dllimport) # endif –
Dave