C++数据没有明显变化

Ami*_*hum 1 c++

我有以下方法:

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;
}
Run Code Online (Sandbox Code Playgroud)

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

该方法试图扩展数组,它是类的类成员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,数组中的最后一个更改,即使我没有在打印之间触及它!有什么可以导致这个的想法吗?

dir*_*tly 7

当你开始索引时0(如在C和C++中),你停在一个小于size.所以,做:

for (int i=0; i<size; i++) // not <= 
Run Code Online (Sandbox Code Playgroud)

这是一个经典的off-by-one错误(你正在调用UB).