T
is = to char
counts_
はヒープに格納された整数の配列です ヒープ
values_
上の配列の配列です
if ステートメントに問題が発生し、削除しようとするtmpe
とエラーが発生します。delete ステートメントをコメントアウトすると、コードは実行されますが、すべてのポインターがvalues_
同じ配列を指し続けます。コードの考え方は、選択した配列の 1 つの値を含む新しい配列を作成し、values_
それに値を 1 つ追加することです。values_
次に、それを元の配列内の場所に再割り当てします。tmpe
配列へのポインターを削除しようとするまで、配列は正しい値を保持しています。プログラム全体を実行すると、中止 (コア ダンプ) エラーが発生します。
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]++;
}