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

c++ Releasing memory of array pointer

本文关键字:内存 指针 数组 释放 c++      更新时间:2023-10-16

我有一个如下的函数

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

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

您的语法正确,但您的推理有点缺陷:

我不能使用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个字符缓冲区的动态分配是过度的-只需在堆栈上使用本地缓冲区:

void ReadMyPacket(int Socket)
{
  char inStartup[2];
  int recvReturn = recv(Socket, inStartup, 2, 0);
  ...
  ...
  // nothing to dispose of here
}

这应该足够释放内存了。

delete[] inStartup;

然而,如果您要将它包含在函数中,并且它不是很大,您最好使用堆栈,它更快,不需要释放。

char inStartup[2];

这正确地删除了内存。

delete[] inStartup;

变魔术

new []