私は C++ で、int の配列の末尾からゼロを削除するメソッドを書いている学生です。配列は構造体にあり、構造体には配列の長さを追跡する int もあります。
このメソッドは、最初のゼロ以外の要素に遭遇するまで、最後の要素から始めて各要素を調べ、長さの値を変更することによってその要素を「最後の要素」としてマークします。次に、メソッドは元の「最後の要素」に戻り、範囲外ではない要素 (ゼロ) を削除します。
i
配列の更新された長さよりも大きい場合に配列内の th 要素を削除する部分はi
、次のようになります。
if (i > p->length - 1) {
delete (p->elems + i); // free ith elem
しかし、その行は間違っています。Delete はポインターを受け取ります。i
したがって、削除したい整数のメモリ位置を取得するには、配列へのポインターを回復してから追加する必要があると感じています。
私の直感は間違っていますか?エラーは微妙ですか?それとも、私は完全に間違った考えを持っていますか? 私は疑問に思い始めました: 本当にこれらのプリミティブを解放する必要があるのでしょうか? それらがプリミティブでない場合、私はそうする必要があります。