我正在尝试编译一个 64 位可执行文件,每当我调试它时,我发现它没有正确传递值:
char buf[1024];
nret = recv(sock, buf, 1024, 0);
if( nret == 0 )
break;
SOCKET s = sock;
char *ptr = buf;
int len = nret;
HandleReceive(s, ptr, len);
在handlereceives堆栈上,它说ptr是一个坏指针,所有的值都完全搞砸了!它们不是调用函数之前的样子。我能做些什么来解决这个问题?
是的,我使用视觉工作室调试器。我什至尝试为 ptr 传递一个 0x1000 的设定值。它也没有得到这个值。
我正在编译为调试。
该函数非常长,但它是这样的:
void HandleReceive(SOCKET sock, char *buf, int len)
{
using namespace Socket;
if( _internal_safecmp(buf, HELLO, strlen(HELLO)) )
{
echo("hello");
}
}
我已经调试了代码,问题是它没有正确访问值。
它将在 rcx 中传递一个值,但随后期望传递的相同值在 r10 中......所以它必须是编译器的一个错误。有没有什么办法解决这一问题?