我有以下方法:
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
会发生变化,即使我没有在打印之间触及它!有什么可以导致这个的想法吗?
答案 0 :(得分:7)
当您从0
开始编制索引时(如在C和C ++中),您将停在比size
小的位置。所以,做:
for (int i=0; i<size; i++) // not <=
这是一个经典的off-by-one错误(你正在调用UB)。