"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;
我想用 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;