T
is = to char
counts_
是存储在堆上的整数数组
values_
是堆上的数组数组
问题到达if语句,当我尝试删除tmpe
时出现错误。如果我将删除语句注释掉,代码就会运行,但它只是将values_
中的所有指针指向同一个数组。代码的想法是创建一个包含所选values_
数组之一的值的新数组,然后为其添加一个额外的值。然后将其重新分配回我从中获取的values_
数组中的位置。 tmpe
数组保持正确的值,直到我尝试删除指向它的指针。运行我的整个程序时出现Aborted(core dumped)错误。
if (initialized(n) == true)
{
T *tmpe = new T[counts_[n] + 1];
for (size_type i = 0; i < counts_[n]; i++)
{
tmpe[i] = values_[n][i];
}
tmpe[counts_[n]] = val;
delete [] values_[n];
values_[n] = tmpe;
delete [] tmpe;
counts_[n]++;
}
else
{
T *tmpd = new T[counts_[n] + 1];
tmpd[counts_[n]] = val;
delete [] values_[n];
values_[n] = tmpd;
delete [] tmpd;
counts_[n]++;
}
答案 0 :(得分:2)
问题是你保留一个指向tmpe
的指针,但是会立即释放内存:
values_[n] = tmpe;
delete [] tmpe;
当下一次迭代尝试访问和/或删除values_[n]
时,它是一个悬空指针。
tmpd
同样如此。
如果您使用std::vector
,则无需担心此类问题。
答案 1 :(得分:-1)
重新分配tmpd
以指向它后,您无需删除values_
。一旦重新分配它,内存就会被释放。发生的事情是你试图释放一些不存在的东西。