0

プログラムでいくつかの問題を解決しようとしていますが、コピー コンストラクターまたはデストラクタに問題があるようです。メモリ例外が発生しています。

助けていただければ幸いですありがとう

ArrayStorage::ArrayStorage(const ArrayStorage &a):readArray(a.readArray),arraysize(a.arraysize)
{
    readArray = new string[arraysize]; //create the array

    memcpy (readArray,a.readArray,sizeof(string)*arraysize);//Copy the values of bytes from the location pointed at by the souce and destination.
}

ArrayStorage::~ArrayStorage(void)
{
    delete[](readArray);//deconstuctor to delete the array.
}

これは、 memcpy 以外の配列をコピーするためのより良い方法でしょうか:

for (int i = 0 ; i < arraysize ; i ++)
    {
        readArray[i] = a.readArray[i];
    }
4

4 に答える 4

6

あなたのやり方で文字列をコピーすることはお勧めしません。文字列はヒープメモリへの参照を保持しているため、実際にはポインタをコピーするため、両方の配列の文字列がメモリを共有しています。これはあまり C++ らしくなく、非常に危険です。文字列に代入演算子またはコピーコンストラクターを使用することをお勧めします(はい、サイクルを行います)。

于 2012-05-07T13:34:45.757 に答える
0

文字列にも動的メモリがあるため、各文字列を調べてコピーを作成する必要があります。

修正は、memcopy ではなく、配列内の各文字列をコピーすることです。例外は、2 つの異なる文字列がメモリの一部への同じポインタを持ち、両方がそれを解放しようとしている場合です。

于 2012-05-07T13:38:36.783 に答える