1

Tis = 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]++;
}
4

2 回答 2

2

问题是您保留了一个指向tmpe但立即释放内存的指针:

values_[n] = tmpe;
delete [] tmpe;

当下一次迭代尝试访问和/或删除values_[n]时,它是一个悬空指针。

也是如此tmpd

如果你用过std::vector,就不用担心这样的问题了。

于 2013-09-23T19:41:15.530 回答
-1

重新分配指向它tmpd后,您无需删除。values_一旦你重新分配它,内存就会被释放。正在发生的事情是你试图释放一些不存在的东西。

于 2013-09-23T19:41:50.923 回答