C++ 没有正确地传递参数
我试图编译一个64位可执行文件,无论何时调试它,我都会发现它没有正确地传递值:C++ 没有正确地传递参数,c++,visual-c++,C++,Visual C++,我试图编译一个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); 在HandlerReceives堆栈上,它说ptr是一个错误的指针,所有的值都被完全弄乱了!它们与调用函
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);
在HandlerReceives堆栈上,它说ptr是一个错误的指针,所有的值都被完全弄乱了!它们与调用函数之前不同。我能做些什么来解决这个问题
是的,我使用visual Studio调试器。我甚至尝试为ptr传递一个设置值0x1000。它也没有得到这个值
我正在编译为debug
函数非常长,但它是这样的:
void HandleReceive(SOCKET sock, char *buf, int len)
{
using namespace Socket;
if( _internal_safecmp(buf, HELLO, strlen(HELLO)) )
{
echo("hello");
}
}
我已经调试了代码,问题是它不能正确地访问值
它将在rcx中传递一个值,但期望在r10中传递相同的值。。。所以这一定是编译器的一个bug。有没有办法解决这个问题?您是否编译并链接调试信息?如果没有它,调试器只能在检查堆栈时进行有根据的猜测。是的,您使用调试器,但您是作为调试还是作为发布版本编译?您的代码没有意义。函数在哪里?调用它的代码是否看到了HandlerReceive的正确原型?这是特别重要的,如果使用的语言是C而不是C++,因为所有你从编译器得到的都是默认的警告。你是在谈论SoCK还是BUF参数?好的,buf应该在RDX中通过,而sock应该在RCX中通过。可能调用约定在声明和定义上不匹配?