2012-06-14 31 views
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; 
} 

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,尽管我还没有印之间的感动吧!任何想法可能导致什么?

回答

7

当您从0(如C和C++中)开始编制索引时,您将停止在小于size的位置。因此,请执行以下操作:

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

这是一个经典的错误(并且您正在调用UB)。

+0

我不明白这是如何导致打印不同点的原因,即使我打了一个。 –

+0

当你调用UB时,不止一次,你不能指望任何理智的输出。修复你的代码,然后再给它一次。请记住,我们甚至不知道getX是什么,getY是什么。所以,我建议你也检查一下。 – dirkgently

+0

在这种情况下,'current'保持为最大的索引,而不是实际的大小。 –

相关问题