"free(): double free detected in tcache 2" 在动态数组中 class 在 C++ 中

"free(): double free detected in tcache 2" in dynamic array class in C++

我想用 C++ 编写一个动态数组 class。我收到此消息: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; 行是问题行。为什么我会收到这条消息?

看起来你在循环中这样做:

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

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

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

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