J'ai la méthode suivante:C données ++ changement sans raison apparente
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
est pour le débogage et est également très simple:
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;
}
}
La méthode tente de développer ensemble, ce qui est un membre de classe de type Point*
. La chose étrange est l'impression que je reçois lors de l'exécution suivante:
tableau
==========
(0,0): 0, 0
(1,1): 1, 1
(2,2): 2, 2
(3,3): 3, 3
tableau ==========
(0,0): 0, 0
(1,1): 1, 1
(2,2): 2, 2
(3,5.58294e-322): 3, 5.58294e-322
Pour une raison quelconque la dernière Point
des changements de tableau, même si je ne l'ai pas touché entre les impressions! Une idée sur ce qui peut causer cela?
Je ne vois pas comment cela peut être ce qui provoque l'impression de différents points, même si je suis parti par un. –
Lorsque vous appelez UB, comme vous l'avez fait plus d'une fois, vous ne pouvez vous attendre à aucune sortie saine. Fixez votre code et donnez-lui un autre coup de feu. Rappelez-vous que nous ne savons même pas ce que 'getX',' getY' fait. Donc, je vous suggère de vérifier eux aussi. – dirkgently
Dans ce cas, 'current' est conservé comme le plus grand index, pas la taille réelle. –