我是C ++的新手。我尝试运行小型的动态数组应用程序。因此,我创建了两个动态数组,然后使用delete []命令删除了两个数组,但我却得到了错误的双重释放或损坏
.bak
答案 0 :(得分:1)
您两次删除array
指向的数组:一次在insert
中,一次在~DynamicArray
中。
请记住,每次对new
的调用都必须只有一个,而对delete
的调用只能是一个。还请记住,您不是delete
指针,而是delete
指针所指向的对象。
下面是一组图形,希望可以阐明正在发生的事情:
构造函数之后:
array
+-------+ +--+--+--+-----+--+
| +--------> | | | ... | |
+-------+ +--+--+--+-----+--+
在X *tempArray = new X[Reserve_size + _DEFAULT_SIZE]
之后:
array
+-------+ +--+--+--+-----+--+
| +--------> | | | ... | |
+-------+ +--+--+--+-----+--+
tmpArray
+-------+ +--+--+--+-----+--+-----+--+--+
| +--------> | | | ... | | ... | | |
+-------+ +--+--+--+-----+--+-----+--+--+
在delete[] array
之后:
array
+-------+
| +-------->
+-------+
tmpArray
+-------+ +--+--+--+-----+--+-----+--+--+
| +--------> | | | ... | | ... | | |
+-------+ +--+--+--+-----+--+-----+--+--+
在array = tempArray
之后:
array
+-------+
| +---------+
+-------+ |
|
tmpArray |
+-------+ +v-+--+--+-----+--+-----+--+--+
| +--------> | | | ... | | ... | | |
+-------+ +--+--+--+-----+--+-----+--+--+
在delete[] tempArray
之后:
array
+-------+
| +---------+
+-------+ |
|
tmpArray |
+-------+ v
| +-------->
+-------+
在~DynamicArray
中:
array
+-------+
| +---------+
+-------+ |
|
|
v
哎呀,array
没有指向任何东西,因此您无法delete[]
指向的东西。