Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 没有正确地传递参数_C++_Visual C++ - Fatal编程技术网

C++ 没有正确地传递参数

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是一个错误的指针,所有的值都被完全弄乱了!它们与调用函

我试图编译一个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是一个错误的指针,所有的值都被完全弄乱了!它们与调用函数之前不同。我能做些什么来解决这个问题

是的,我使用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中通过。可能调用约定在声明和定义上不匹配?