0

我的代码是这样的:

// 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 日志)。我在函数内部创建了一个指针并返回它。但是我删除了函数外的指针。这种用法有问题吗?谢谢

4

2 回答 2

0

泄漏的内存可能是 BMP 数据,pmyRgb. 检查该功能的文档。你已经删除了内存pMyGs就好了。这样做两次通常不会有害,但它是无用的。

于 2013-05-04T03:08:31.370 回答
0

多次删除内存将具有不可抗拒的行为。在函数中分配内存,返回它,删除另一个地方并没有错。delete[]需要注意的是和之间有区别delete,但是由于您将内存分配为数组,delete[]因此可以安全使用。

C++中delete和delete[]的区别在此输入链接说明

于 2013-05-04T03:08:57.810 回答