当我要删除动态数组时,我得到了双重无错误或损坏 我是C++新手。我正在尝试运行小型动态阵列应用程序。我创建了两个动态数组,然后使用delete[]删除了两个数组,但我得到了一个错误:双重免费或损坏 class DynamicArray { private: X *array; int Size; int Reserve_size; public: DynamicArray() { array = new X[_DEFAULT_SIZE]; Size = 0; Reserve_size = _DEFAULT_SIZE; } ~DynamicArray() { delete[] array; } void insert(X data) { if (Size == Reserve_size) { X *tempArray = new X[Reserve_size + _DEFAULT_SIZE]; for (size_t i = 0; i < Size; i++) { tempArray[i] = array[i]; } //memcpy(newArray, array, sizeof(array)); delete[] array; array = tempArray; delete[] tempArray; Reserve_size = Reserve_size + _DEFAULT_SIZE; } array[Size] = data; Size++; } X Get(int index) { return array[index]; } };
删除数组指向的数组两次:一次在insert中,另一次在~DynamicArray中 请记住,对于每个对new的调用,必须有一个且只有一个对delete的调用。还请记住,您不会删除指针,而是删除指针指向的对象 下面是一组图形,希望能说明发生了什么: 建造师之后:当我要删除动态数组时,我得到了双重无错误或损坏 我是C++新手。我正在尝试运行小型动态阵列应用程序。我创建了两个动态数组,然后使用delete[]删除了两个数组,但我得到了一个错误:双重免费或损坏 class DynamicArray { private: X *array; int Size; int Reserve_size; public: DynamicArray() { array = new X[_DEFAULT_SIZE]; Size = 0; Reserve_size = _DEFAULT_SIZE; } ~DynamicArray() { delete[] array; } void insert(X data) { if (Size == Reserve_size) { X *tempArray = new X[Reserve_size + _DEFAULT_SIZE]; for (size_t i = 0; i < Size; i++) { tempArray[i] = array[i]; } //memcpy(newArray, array, sizeof(array)); delete[] array; array = tempArray; delete[] tempArray; Reserve_size = Reserve_size + _DEFAULT_SIZE; } array[Size] = data; Size++; } X Get(int index) { return array[index]; } };,c++,pointers,memory-leaks,C++,Pointers,Memory Leaks,删除数组指向的数组两次:一次在insert中,另一次在~DynamicArray中 请记住,对于每个对new的调用,必须有一个且只有一个对delete的调用。还请记住,您不会删除指针,而是删除指针指向的对象 下面是一组图形,希望能说明发生了什么: 建造师之后: array +-------+ +--+--+--+-----+--+ | +--------> | | | ... | | +-------+ +--+--+--+-----+-
array
+-------+ +--+--+--+-----+--+
| +--------> | | | ... | |
+-------+ +--+--+--+-----+--+
在X*tempArray=newx之后[保留大小+\u默认大小]:
删除[]数组后:
数组=临时数组后:
删除[]临时数组后:
在卡雷:
哎呀,数组没有指向任何东西,所以不能删除它指向的对象。array=tempArray;删除[]临时数组;没什么意义@好奇的家伙你这是什么意思。C++创建另一个数组并将其复制到前一个数组。你从哪里来?基于价值的语言?基于参考的?
array
+-------+ +--+--+--+-----+--+
| +--------> | | | ... | |
+-------+ +--+--+--+-----+--+
tmpArray
+-------+ +--+--+--+-----+--+-----+--+--+
| +--------> | | | ... | | ... | | |
+-------+ +--+--+--+-----+--+-----+--+--+
array
+-------+
| +-------->
+-------+
tmpArray
+-------+ +--+--+--+-----+--+-----+--+--+
| +--------> | | | ... | | ... | | |
+-------+ +--+--+--+-----+--+-----+--+--+
array
+-------+
| +---------+
+-------+ |
|
tmpArray |
+-------+ +v-+--+--+-----+--+-----+--+--+
| +--------> | | | ... | | ... | | |
+-------+ +--+--+--+-----+--+-----+--+--+
array
+-------+
| +---------+
+-------+ |
|
tmpArray |
+-------+ v
| +-------->
+-------+
array
+-------+
| +---------+
+-------+ |
|
|
v