【发布时间】:2013-09-28 19:52:29
【问题描述】:
T 是 = 到 charcounts_ 是存储在堆上的整数数组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]++;
}
【问题讨论】:
-
向量向量向量向量向量
-
这两行放在一起没有意义:
values_[n] = tmpe; delete [] tmpe; -
你没有删除它是正确的。可以这样想:您正在分配一个新的内存块来保存 n+1 个值,然后填充它。然后删除旧的内存块,并将 values[n] 指向新创建的内存块。不要删除那个新块!顺便说一句,@AlanStokes 是正确的。使用向量。整个块看起来像这样:
values[n].push_back(val);
标签: c++ arrays memory heap-memory delete-operator