我的功能如下
void ReadMyPacket(int Socket)
{
char *inStartup = new char[2];
int recvReturn = recv(Socket, inStartup, 2, 0);
...
...
delete[] inStartup;
}
我应该如何释放inStartup的内存?我不能使用std :: string,因为我必须在recv函数中传递数组。
答案 0 :(得分:2)
2字符缓冲区的动态分配是过度的 - 只需在堆栈上使用本地缓冲区:
void ReadMyPacket(int Socket)
{
char inStartup[2];
int recvReturn = recv(Socket, inStartup, 2, 0);
...
...
// nothing to dispose of here
}
答案 1 :(得分:2)
你有正确的语法,但你的推理有点有缺陷:
我无法使用
std::string
,因为我必须在recv
函数中传递数组。
虽然string
可能不是正确的界面,但vector
肯定是。 vector
是连续数组的主要原因是与C的互操作性。
你可以写:
void ReadMyPacket(int Socket)
{
std::vector<char> inStartup(2);
int recvReturn = recv(Socket, &inStartup.at(0), inStartup.size(), 0);
//...
//...
}
通过这种方式,您可以避免忘记自己致电delete[]
的风险(例如,如果发生异常)。
注意:在C ++ 11及更高版本中,您可以使用inStartup.data()
代替&inStartup.at(0)
。
答案 2 :(得分:1)
这应该足以释放记忆。
delete[] inStartup;
但是,如果你要在一个函数中包含它并且它不是很大,你最好使用堆栈,它更快,不需要释放。
char inStartup[2];
答案 3 :(得分:0)
这正在删除内存。
delete[] inStartup;
由
构成new []