T
是 = 到 char
counts_
是存储在堆上的整数数组
values_
是堆上数组的数组
问题出现在 if 语句中,当我尝试删除 tmpe
时出现错误。如果我注释掉 delete 语句,代码会运行,但它只是将我在 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]++;
}
最佳答案
问题是您保留了指向 tmpe
的指针,但立即释放了内存:
values_[n] = tmpe;
delete [] tmpe;
当下一次迭代尝试访问和/或删除 values_[n]
时,它是一个悬空指针。
tmpd
也是如此。
如果你使用了std::vector
,你就不必担心这样的问题。
关于c++ - 将一个数组分配给堆 C++ 上的另一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18967361/