Namara

毎日コード。手助けなし。

2026-08-21

assign.cpp

#include <algorithm>

// Buffer owns `data`, an array of `size` ints.
Buffer& Buffer::operator=(const Buffer& other) {
    delete[] data;
    data = new int[other.size];
    std::copy(other.data, other.data + other.size, data);
    size = other.size;
    return *this;
}

このコードは自己代入(buf = buf;)で壊れます。バグを見つけて直してください。

答え

delete[] dataが、other.dataを読み取るより先にメモリを解放してしまいます。other*this自身である場合、コピー処理はたった今解放されたばかりのメモリを読み取ることになります。先頭に自己代入のガードを追加してください:if (this == &other) return *this;