1. ホーム
  2. c++

[解決済み] C++読み取りアクセス違反エラー

2022-02-09 08:33:45

質問内容

現在、"0xC0000005が表示されています。Access violation reading location 0xcccccce0." エラーが発生し、問題を診断しようとしましたが...私が定義した3の法則が作用して、私をここに導くときに問題が発生すると思います。

size_type size() const
    {   // return length of sequence
    return (this->_Mysize); <---------------------this line
    }

実は全く問題がないとは言い切れず、何日もくよくよしています。

以下、私のルールオブスリー

ArrayStorage::ArrayStorage(){
     myArray = new string[7079];
}

ArrayStorage::~ArrayStorage(){
    delete[] _data;
    delete[] myArray;
}

ArrayStorage::ArrayStorage(const ArrayStorage &A) {
    _size = A.size();
    _data = new string [size()];
    for (int i = 0; i < size(); ++i)
        _data[i] = A[i];
}

ArrayStorage& ArrayStorage::operator=(const ArrayStorage &A){
    if (this != &A) {
        delete [] _data;
        _size = A.size();
        _data = new string [A.size()];
        for (int i = 0; i < size(); ++i) {
             _data[i] = A[i];
        }
    }
    return *this;
}

const string& ArrayStorage::operator[](int i) const{
    assert((i >= 0) && (i < size()));
    return _data[i];
}

string& ArrayStorage::operator[](int i){
    assert((i >= 0) && (i < size()));
    return _data[i];
}

解決方法は?

msvcでコンパイルした場合、未初期化の場合、スタック変数は0xCCバイトで埋め尽くされます。つまり、0xcccccce0は、おそらくスタック上の未初期化のポインタ変数とオブジェクト構造体の_MySizeオフセットの結果だと思われます。