C++ 动态数组类中的“free(): double free detection in tcache 2”

问题描述

我想用 C++ 写一个动态数组类。当我运行代码时,我收到此消息:free(): double free detected in tcache 2

这是我的代码的一部分:

        if(num_of_items >= size)
        {
            int new_size = size < 5 ? 2 * size : (int)(3/2 * size);
            int * temp = new int[new_size];
            
            for(int i = 0; i<size; i++)
            {
                temp[i] = items[i];
            }

            delete [] items;
            items = temp;
            delete [] temp; // This is the line that the program shows the message

            size = new_size;
        }

num_of_items 是数组的完整块数。我使用调试器找到问题的地方,我发现 delete [] temp; 行作为问题的行。为什么我会收到这条消息?

解决方法

您的指针 temp 是新的、更大的数组,您的对象需要保存它。您删除它,使您的对象处于不良状态。

补救方法很简单,删除这一行:delete [] temp;

,

看起来您在循环中执行此操作:

 delete [] items;
 items = temp;
 delete [] temp;

然后重复。所以第二次循环时,items 指向你已经删除的数据。我认为你需要摆脱第二个删除[]。