【发布时间】:2025-11-25 14:15:01
【问题描述】:
我的代码是这样的:
// a function that new a char pointer and return it
Unsigned char* RGB2GS(Unsigned char* pRgb, int nw, int nh, int nbpp) {
unsigned char* pGs = new unsigned char[nw*nh*nbpp];
// code for rgb to gs...//
return pGs;
}
int main() {
unsigned char* pmyRgb = ReadBmp(filename);//size 1024x1024, RGB
unsigned char* pMyGs = NULL;
pMyGs = RGB2GS(pmyRgb, 1024, 1024, 24);
delete[] pMyGs ;
delete[] pmyRgb ; // correct typo
我发现有内存泄漏(来自 VS2010 日志)。我在函数内部创建了一个指针并返回它。但是我删除了函数外的指针。这种用法有问题吗?谢谢
【问题讨论】:
-
为什么要删除两次?
-
另外,编写这样的代码只是要求泄漏。使用 RAII!
-
为什么这段代码要求泄露?我试图实现函数 rgb2gs。我认为在其中创建 GS char 指针并返回更合乎逻辑。但是请告诉我这样做的更好方法是什么?非常感谢。
-
这是要求泄漏,因为如果
RGB2GS中的new抛出,pmyRgb将永远不会被删除。请改用std::vector<unsigned char>。
标签: c++ function memory-leaks