在函数中声明动态数组

时间:2017-01-30 23:30:18

标签: c++

我正在创建一个函数,如果前一个数组已满,则重新分配一个新的动态数组。但是,如果我编译它,则会发生运行时错误。当我使用Visual Studio 2015进行调试时,似乎在函数完成后,编译器无法访问动态数组或删除数组。你能告诉我为什么吗?

void reallocateMemory(string* arr, int& physicalSize, int addedMemory) {
    string* result = new string[physicalSize + addedMemory];
    for (int i = 0; i < physicalSize; i++) {
        result[i] = arr[i];
    }

    delete[] arr;

    arr = result; // After this code, it seems variable arr works well.
    result = nullptr;
    physicalSize += addedMemory;
} // However, when the function returns, arr cannot access a dynamic array.

1 个答案:

答案 0 :(得分:0)

  

但是,当函数返回时,arr无法访问动态数组。

事实上。 arr是一个局部变量,在函数返回后将不再存在。您在函数中分配的内存被泄露,因为它不再被任何变量指向。

您需要某种方法将指针传递给函数范围之外的新分配的内存。典型的方法是:1)更改函数的返回类型,并返回指针2)将原始指针值作为引用传递,以便函数可以修改引用的指针变量。