C++ 堆栈崩溃<;未知>;中止(内核转储)错误

C++ 堆栈崩溃<;未知>;中止(内核转储)错误,c++,stack-smash,C++,Stack Smash,我一直在为学校做一个项目,在那里我们被分配任务,用两个客户端和一个服务器(TCP)制作轮盘赌游戏。 所以我想我应该为服务器和客户端创建一个void函数,以实现通信,但我遇到了这个错误,无法找到哪里出了问题,如果有人知道,请告诉我!) 客户: void bet(int client,const int size,char message[]) { char to_server[size]; if (recv(client,message,size,0) < 0) {

我一直在为学校做一个项目,在那里我们被分配任务,用两个客户端和一个服务器(TCP)制作轮盘赌游戏。 所以我想我应该为服务器和客户端创建一个void函数,以实现通信,但我遇到了这个错误,无法找到哪里出了问题,如果有人知道,请告诉我!)

客户:

void bet(int client,const int size,char message[])
{
    char to_server[size];
    if (recv(client,message,size,0) < 0)
    {
        Receive_Error obj;
        throw obj;
    }
    std::cout << message << std::endl;
    std::cin >>to_server;
    if (send(client,to_server,sizeof(to_server),0) < 0)
    {
        Send_Error obj;
        throw obj;
    }
}
size是一个常量int,值为256;
P.S:我之所以标记C和C++,是因为它是使用C函数的要求(包括在sys/Socket中,h,sys/类型,h,NETION/In .h),但我主要研究C++,所以我想削减。

< P>好的,经过很长时间,甚至100都是太多的缓冲区了。所以我把它降到了50。

听起来您可能需要学习如何使用调试器逐步完成代码。有了一个好的调试器,您可以逐行执行您的程序,并查看它偏离预期的地方。这是一个必要的工具,如果你要做任何编程。进一步阅读:第一次
下注与第二次
下注之间的
recv
有一个很小但非常重要的区别(前者正确,后者不正确)。@molbdnilo谢谢!我更正了它,但仍然收到相同的错误消息。看起来您在
char to_server[size]
和/或
char to_client[size]
中有缓冲区溢出。首先检查一下。不能忽略rcve()的返回值。这只是一个偶然的消息的确切长度。如果不是,那么就会发生非常丑陋的事情,除了损坏的数据之外,它不会是以零结尾的字符串。TCP之上的一个简单协议是首先传输消息长度,以便接收方始终知道何时停止调用rcve()。
void bet(int client,char message[],const int size)
{
    char to_client[size] = "Mire fogad ?\nColor[b/r] + Number [0-9] + Bet\n";
    if (send(client,to_client,sizeof(to_client),0) < 0)
    {
        Send_Error obj;
        throw obj;
    }
    if (recv(client,&message,size,0) < 0)
    {
        Receive_Error obj;
        throw obj;
    }
    std::cout << message ;

}
char* message = new char[size];
for ( not important )
{
   bet(client_socket,message,size)
}
delete[] message;