C++数据无缘无故地变化
C++ data changing with no apparent reason
>我有以下方法:
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)。
相关文章:
- C++取消引用指针.为什么会发生变化
- 为什么在读取文件大小时文件IO速度会发生变化
- 为什么cudaMemGetInfo报告设备内存总量的变化
- 如何避免LED在循环状态变化中闪烁?
- 当 I2C 值在C++中发生变化时收到通知
- Gtkmm 会不断检查 Gtk::日历上的所选日期是否发生变化
- 当我调用对象的方法时,对象的成员会发生变化
- 为什么向量内部的指针在从函数返回时会发生变化?
- 如何在 c++ 中循环中使用频率变化的声音?
- 为什么 C++ 中的零会发生变化
- 为什么我的全局变量似乎没有变化?
- 当我使用CHAR_INFO结构时,控制台会无缘无故地改变颜色
- 使用 IMFSinkWriter 编码的视频的播放速度会根据宽度而变化
- C++11:具有互斥锁的线程看到原子变量的值发生变化,尽管这是唯一可以改变它的代码
- 为什么预减量会导致奇怪的变化?
- MATLAB:跟踪imufilter对象中的状态变化
- 调用函数时,变量突然无缘无故地更改
- 无缘无故地抛出实例
- C++数据无缘无故地变化
- OpenMPI for C++:函数内部的排名变化显然是无缘无故的