c ++释放数组指针的内存

时间:2014-11-10 15:49:24

标签: c++

我的功能如下

void ReadMyPacket(int Socket)
{
  char *inStartup = new char[2];
  int recvReturn = recv(Socket, inStartup, 2, 0);
  ...
  ...
  delete[] inStartup; 
}

我应该如何释放inStartup的内存?我不能使用std :: string,因为我必须在recv函数中传递数组。

4 个答案:

答案 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 []