我正在开发一个基于UDP的客户端 - 服务器应用程序,该应用程序必须拥有此服务器和2个客户端。 2个客户端将数据发送到服务器并从中接收数据。现在我正在使用以下
static char Buffer_In[256];
static char Buffer_Out[256];
我将要传输的数据填入:
memcpy( Buffer_Out,
(char*)&Foo_Data,
sizeof(Foo_Data) );
并发送:
Ret_Value = sendto( Socket,
Buffer_Out,
sizeof(Buffer_Out),
0,
(SOCKADDR*)&Remote_Addresse,
Remote_Addr_Len );
Foo_Data是一个具有多个entrys的结构。我有第二个结构Baa_Data,它小于Foo_Data,但我使用相同的Buffer_Out。如果在将新数据写入之前我没有先释放Buffer_Out会有问题吗?如果是,那么什么问题以及如何防止它们呢?
答案 0 :(得分:1)
当sendto()
返回时,缓冲区保存的数据已被复制。所以代码可以自由地重用缓冲区。
答案 1 :(得分:1)
不,这不会是一个问题。首先,静态变量使用的内存不能被释放" - 它在程序启动时分配,只有在程序启动时才会被释放。
您发布的代码部分看起来很安全(假设您不使用多个线程)。缓冲区buffer_out
可以在sendto
返回后立即重用;在内部,此函数在返回之前将缓冲区的内容复制到其他内存位置。