C ++内存泄漏:新的指针在函数和删除外部

时间:2013-05-04 03:00:38

标签: c++ function memory-leaks

我的代码是这样的:

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

多次删除内存会导致行为不正常。在函数中分配内存,返回它并删除另一个地方没有任何问题。值得注意的是delete[]delete之间存在差异,但由于您将内存分配为数组,delete[]可以安全使用。

The difference between delete and delete [] in C++ enter link description here