【发布时间】:2013-11-04 02:15:46
【问题描述】:
我有一个服务器和一个客户端。我正在使用winsock2。客户端发送4个字节:
char *ack = new char[4];
sprintf( ack, "%d", counter );
sendto( clientSocket, ack, 4, 0, ( struct sockaddr* )&remote, sizeof( remote ) );
服务器收到这4个字节:
char* acks = new char[4];
if( ( bytes = recvfrom( serverSocket, acks, 4, 0, ( struct sockaddr* )&remote, &remote_size ) ) == SOCKET_ERROR ) {
cout << "socket error = " << WSAGetLastError() << endl;
break;
}
if( bytes > 0 ) {
sscanf( acks, "%d", &i );
}
我收到了这个错误,我不知道如何解决它:
>Critical error detected c0000374
>
>server.exe has triggered a breakpoint.
我知道指针和内存分配有问题。但我的 c++ 技能是基本的。
【问题讨论】:
-
如果你确定 char 的大小是 5.. 为什么不直接做
char acks[5] = {0};另外,你能显示“remote”和“remove_size”的声明吗? -
大小实际上是 4。我尝试了不同的东西,但忘记将代码恢复为正确的形式。数组指针的声明应该是
char* acks = new char[4];其他声明是:SOCKADDR_IN remote; int remote_size = sizeof( remote );并感谢您的帮助。 -
我实际上编辑了我的原始帖子并修复了 char 数组指针的长度
-
我只想补充一点,错误发生在 sscanf 行。如果我评论该行,则会在 recvfrom 行中发生错误。这两行中唯一常见的数组指针是acks。
标签: c++ pointers malloc winsock2