C++ - 删除作为参数传递的数组

maj*_*aja -1 c++ arrays heap-memory

我有这个功能的意外行为:

void myClass1::expandArray(myClass2 *arr, int newSize) //myClass1 is friend of myClass2
{
    myClass2 *temp = new myClass2[newSize];
    /*fill temp with data*/
    delete[] arr;
    arr = temp;
    capacity = newSize; //capacity is a data member of the class
}
Run Code Online (Sandbox Code Playgroud)

这个函数首先正确执行,然后(这是最让我困惑的)在被调用的第二次或第三次,它只是冻结,根本没有反馈,直到几分钟后程序崩溃.

我有一个版本,其中数组是类的私有成员,它不作为参数传递,它正常工作.

Ser*_*eyA 6

使用最新的编辑问题非常清楚.函数删除原始数组,然后复制本地指针 - 不以任何方式影响原始指针.结果,它一直指向(现在删除)原始数组.

例:

int* my_arr = new int[10];
expandArray(my_arr, 25);
my_arr[0] = 5; // crash-boom-bang! my_arr still points to the same memory as it did before expandArray was called!
Run Code Online (Sandbox Code Playgroud)

解决方案 - 正如我在评论中所说,使用std::vector.所有必要的调整大小都将为您处理.

如果你对使用C风格的动态数组很感兴趣,你应该通过引用传递你的指针,即

void expandArray(MyClass*& arr, size_t sz);
Run Code Online (Sandbox Code Playgroud)