我正在创建一个函数,如果前一个数组已满,则重新分配一个新的动态数组。但是,如果我编译它,则会发生运行时错误。当我使用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.
答案 0 :(得分:0)
但是,当函数返回时,arr无法访问动态数组。
事实上。 arr
是一个局部变量,在函数返回后将不再存在。您在函数中分配的内存被泄露,因为它不再被任何变量指向。
您需要某种方法将指针传递给函数范围之外的新分配的内存。典型的方法是:1)更改函数的返回类型,并返回指针2)将原始指针值作为引用传递,以便函数可以修改引用的指针变量。