我在 main 函数中创建了 2 个动态数组。我已通过引用将它们都传递给了该函数。然后,我将数据从较小的动态数组复制到较大的动态数组。我删除了较小的动态数组。将较大动态数组的地址分配给较小动态数组。现在理想情况下 arr 数组的大小应为 10。但是,当我尝试在 main 中打印数组的第 6 个元素时,它崩溃了。请看下面的代码:
#include <iostream>
#include <string>
using namespace std;
void func(string * arr, string * brr);
int main()
{
string* arr = new string[5];
arr[0] = "hello0";
arr[1] = "hello1";
arr[2] = "hello2";
arr[3] = "hello3";
arr[4] = "hello4";
string* brr = new string[10];
func(arr, brr);
for(int i = 0; i < 6; i++)
cout << arr[i] << endl;
return 0;
}
void func(string * arr, string * brr)
{
for(int i = 0; i < 5; i++)
brr[i] = arr[i];
for(i = 0; i < 5; i++)
cout << brr[i] << endl;
delete []arr;
arr = brr;
arr[5] = "hello5";
}
最佳答案
此行对调用者完全没有影响:
arr = brr;
因此,在调用之后,arr
准确地指向它之前指向的位置 - 现在无效的内存区域(因为您删除了它)。
如果这是一个 C 问题,我建议您使用指向指针的指针(string **arr
)。然而,我觉得这在 C++ 程序中很糟糕。也许您想在某处使用引用?
关于c++ - 传递给函数的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9167540/