未释放动态分配的数组

Ste*_*ano 1 c++ arrays pointers memory-leaks

我正在使用上面的代码动态分配一个数组,在函数内部做一些工作,返回一个数组元素并释放函数外部的内存.但是当我尝试释放数组时,它不会释放内存,而且我有内存泄漏.指向myArray变量的调试器向我显示错误CXX0030.为什么?

struct MYSTRUCT
{
    char *myvariable1;
    int myvariable2;
    char *myvariable2;

    ....
};

void MyClass::MyFunction1()
{
    MYSTRUCT *myArray= NULL;

    MYSTRUCT *myElement = this->MyFunction2(myArray);

    ...

    delete [] myArray;
}

MYSTRUCT* MyClass::MyFunction2(MYSTRUCT *array)
{
    array = (MYSTRUCT*)operator new(bytesLength);

    ...

    return array[X];
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*edy 5

你应该使用的唯一时间delete[]是你已经分配new[],但那不是你正在做的.您正在使用operator new,这不是您应该用于通用数组分配的.请new[]改用.或者使用矢量.

此外,虽然您传递myArrayMyFunction2as array然后array在函数内部分配一个新值,但这不会更改myArray调用者的值.该变量保留其原始的空值,因此您的delete[]调用不执行任何操作.您可以更改array为通过引用而不是按值传递,因此对它的更改将反映在调用方的实际参数中.