c++ - 递归传递动态变量的内存泄漏

标签 c++ recursion memory-leaks

我有一个递归函数,每次调用该函数时都需要创建一个新数组。该函数还需要先前创建的数组:

void myFunc(int* prevArray)
{
int newSize;
//do some calculations to find newSize
int* newArray;
newArray = new int[newSize];
//do some calculations to fill newArray
//check some stopping condition
myFunc(newArray);
}

此函数会泄漏内存,但我无法通过添加

来避免它

delete[] newArray;

因为我只能在再次调用该函数后添加它。我该如何解决这个问题?

最佳答案

您可以通过使用动态内存分配来解决这个问题。

// allocate initial size
const int INITIAL_SIZE = 5;
int *myArray = malloc(sizeof(int) * INITIAL_SIZE));

int myFunc(int *aArray, int numAllocated) {
    int numElements = calculateNewSize();

    if (numElements != numAllocated) {
        // allocate new size
        realloc(aArray, (numElements * sizeof(int));
    }

    return numElements;
}

现在你可以这样调用 myFunc 了:

int numElements;

numElements = myFunc(myArray, numElements);

当你使用完 myFunc 后不要忘记释放内存

free(myArray);

关于c++ - 递归传递动态变量的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21401353/

相关文章:

javascript - 将 img.src 设置为 dataUrl 会泄漏内存

iphone - 为什么静态 NSString 会泄漏?

android - 内存泄漏检测和循环

c++ - 解析传输流的节目关联部分

c++ - 没有得到任何输出。第一次在 C++ 中使用文件流

java.lang.ClassNotFoundException : Didn't find class on path: dexpathlist

javascript - 函数内 JavaScript 函数调用的更快算法

javascript - Object.assign 递归不按预期工作

C++成员函数的多重定义,基于枚举模板参数

java - 递归方法调用在 kotlin 中会导致 StackOverFlowError,但在 java 中不会