gpt4 book ai didi

释放 * 时 C++ 内存泄漏?

转载 作者:太空宇宙 更新时间:2023-11-04 15:04:45 25 4
gpt4 key购买 nike

我在空虚地使用它:

unsigned char *nEncodedBytes = NULL;
nEncodedBytes = new unsigned char[m_lLenCompressedBytes];

short *shrtDecoded = NULL;
shrtDecoded = new short[iCountDecodedShorts];

short *m_ShortOut;
m_ShortOut = (short*)malloc(( 960*6)*sizeof(short));

unsigned char *m_DataBytes;
m_DataBytes = (unsigned char*)calloc((960*6),sizeof(char));

完成后,我使用释放内存

delete (nEncodedBytes);
delete (shrtDecoded);

free(m_DataBytes);
free(m_ShortOut);

这样好吗?我不确定为什么我在一个地方使用 delete,而在另一个地方使用 free。我复制了我的代码。

是否存在内存泄漏?

谢谢。

最佳答案

当你使用 malloc 时,你使用了 free。很可能,您根本不应该在 C++ 中使用 malloc;这是 C 的做事方式,在 C++ 中很少需要。

当您使用new 分配时,您使用deletenew调用构造函数并分配内存,delete调用析构函数并释放内存。因此,这些是面向对象的 C++ 选项。然而,有一个皱纹。因为 C++ 的实现不知道指针是指向数组还是单个对象,如果你分配一个数组(例如 nEncodedBytes = new unsigned char[m_lLenCompressedBytes];)那么你应该使用 delete[] 而不是 delete 来释放它。

请注意,未能调用 delete[] 仅意味着您将仅为数组中的第一个对象调用析构函数,因此,在这种特殊情况下应该调用 delete[] 和调用 delete 的结果没有区别,因为 char 没有析构函数。

我没有在您的代码中看到内存泄漏,但由于您尚未发布所有代码,我们无法判断。

关于释放 * 时 C++ 内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19276602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com