Salut à tous.
Bon, j´irai droit au but, j´ai un problème que je trouve bizzare, mais d,abord, voici l´intro pour comprendre:
J´ai créé une classe vector en c++ se rapprochant de celle STL, en plus simple et plus ergonomique dans mon cas.
Bon, voici l´erreur un peu bizzare, qui se produit en débug asm de VC++ 6.0(toujours bien de préciser):
189: delete[] ptr;
0040296D mov eax,dword ptr [ebp-4]
00402970 mov ecx,dword ptr [eax+8]
00402973 mov dword ptr [ebp-0Ch],ecx
00402976 mov edx,dword ptr [ebp-0Ch]
00402979 mov dword ptr [ebp-8],edx
0040297C cmp dword ptr [ebp-8],0
00402980 je TVector<CFace>::clear+4Ch ( 0040299c)
00402982 mov esi,esp
00402984 push 3
00402986 mov eax,dword ptr [ebp-8]
00402989 mov edx,dword ptr [eax]
0040298B mov ecx,dword ptr [ebp-8]
0040298E call dword ptr [edx]
00402990 cmp esi,esp
00402992 call __chkesp ( 0040d870)
00402997 mov dword ptr [ebp-10h],eax
0040299A jmp TVector<CFace>::clear+53h ( 004029a3)
0040299C mov dword ptr [ebp-10h],0
le code est correct, le problème vient des registres:
L´erreur(violation pure et dure) est à l´adresse
0040298E call dword ptr [edx]
en regardant les registres à cette ligne là, on découvre ceci:
EAX = 04878824 EBX = 7FFDF000
ECX = 04878824 EDX = FEEEFEEE ( <<<<< ? ! )
ESI = 0012FE08 EDI = 0012FE64
EIP = 0040298E ESP = 0012FE04
EBP = 0012FE64 EFL = 00000206
évidemment, l´erreur se produit en callant à l´adresse FEEEFEEE, à partir du registre EDX.
La grosse question maintenant, comment, partant de
EAX = 04878824
en faisant
00402989 mov edx,dword ptr [eax]
on passe de 04878824 à FEEEFEEE bêtement?
il doit y avoir qu,elle chose qui m´échappe, et vu que suis loin d´être un pro de l,asm, ça pourrait être tout bête.
Merci de m´éclairer.
P.S. si vous avez de besoin de plus de code, dites-le, peut-être que le code n´est pas assez explicite comme ça...