c++释放数组指针的内存
c++ Releasing memory of array pointer
我有一个如下的函数
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 []
相关文章:
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- CUDA:统一内存和指针地址的更改
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 将统一的内存指针传递给内核会减慢程序的速度
- malloc - 运行时内存指针类型分配
- 共享内存指针分段错误
- 使用动态分配的内存(指针)
- 与对象一起返回时清除了内存指针
- 在UWP C++项目中,程序集分配的内存指针自动更改为0xffffffff
- 使用注入的 dll 使用内存指针编辑值
- 提升共享内存 - 指针的返回向量
- 监视从应用程序写入指定的内存指针从 DLL 接收
- 非分页内存指针
- Qt读取内存指针值
- 简单的程序帮助-发送动态内存指针到函数