C++数据无缘无故地变化

C++ data changing with no apparent reason

本文关键字:变化 无缘无故 数据 C++      更新时间:2023-10-16

>我有以下方法:

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 << "arrayn==========" << 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发生了变化,即使我没有在打印之间触摸它!知道什么会导致这种情况吗?

当您从 0 开始索引时(如在 C 和 C++ 中),您会在比 size 少 1 处停止。所以,做:

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

这是一个典型的逐个错误(您正在调用 UB)。