1

私は次の方法を持っています:

void Polygon::expand() {
    int newSize = max * 2;
    printArray(array, current);
    Point* newArray = new Point[newSize];
    printArray(array, current);
    for (int i = 0; i <= current; i++) {
            newArray[i] = array[i];
    }
    delete[] this->array;
    array = newArray;
    max = newSize;
}

printArrayデバッグ用で、非常に単純です。

void printArray(Point* array, int size) {
    cout << "array\n==========" << endl;
    for (int i=0; i<=size; i++) {
            cout << array[i] << ": " << array[i].getX() << ", " << array[i].getY() << endl;
    }
}

メソッドは、型 のクラス メンバーである配列を展開しようとしていPoint*ます。奇妙なことは、これを実行したときに得られるプリントです:

配列
==========
(0,0): 0, 0
(1,1): 1, 1
(2,2): 2, 2
(3,3): 3, 3
配列
== ========
(0,0): 0, 0
(1,1): 1, 1
(2,2): 2, 2
(3,5.58294e-322): 3, 5.58294e-322

Pointプリント間で触れていないにもかかわらず、何らかの理由で配列の最後が変更されます! 何がそれを引き起こす可能性がありますか?

4

1 に答える 1

7

0(C および C++ の場合のように)からインデックス付けを開始すると、 size. したがって、次のようにします。

for (int i=0; i<size; i++) // not <= 

これは、古典的な off-by-one エラーです (そして、UB を呼び出しています)。

于 2012-06-14T18:28:18.940 に答える