当我要删除动态数组时我得到错误双重释放或损坏

时间:2019-06-12 05:01:58

标签: c++ pointers memory-leaks

我是C ++的新手。我尝试运行小型的动态数组应用程序。因此,我创建了两个动态数组,然后使用delete []命令删除了两个数组,但我却得到了错误的双重释放或损坏

.bak

1 个答案:

答案 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[]指向的东西。