填充另一个 2D 数组后,堆已损坏
A heap has been corrupted after populating another 2d array
我正在编写一个程序,我需要获取 2 个文本文件,并查看较小图像在较大图像中的位置。为此,我需要使用二维数组。当我只使用一个数组时,这一切都很好,但是现在我已经用来自较小图像的数据填充了第二个数组,我收到一条错误消息:
在 Wheres Wally.exe 中 0x77338519 (ntdll.dll) 处未处理的异常: 0xC0000374:堆已损坏(参数:0x773758A0)。
我已经设法将其缩小到一行,特别是当第二个数组是实际给定值时
//Array Containing Initial Values Of The Base Image
double* baseImage = new double(largeImageRowSize * largeImageCollumnSize);
//Array Containing Values Of The Small Image
double* wallyImage = new double(smallImageRowSize * smallImageCollumnSize);
//Fill BaseImage with all values from the text file
baseImage = read_text("Cluttered_scene.txt", 1024, 768);
//Allocate 36 arrays for each row (so 49x36 arrays)
for (int i = 0; i < getLargeRowSize(); i++)
a2dArray[i] = new double[getLargeCollumnSize()];
//Put data of image into 2d array
int largeImageCounter = 0;
for (int y = 0; y < getLargeCollumnSize(); y++) {
for (int x = 0; x < getLargeRowSize(); x++) {
a2dArray[y][x] = baseImage[largeImageCounter];
largeImageCounter++;
//cout << a2dArray[x][y];
}
}
//Fill wallyImage array with all values of the small wally text file
wallyImage = read_text("Wally_grey.txt", 49, 36);
//Allocate 36 arrays for each row (so 49x36 arrays)
for (int i = 0; i < getSmallRowSize(); i++)
a2dArrayForWally[i] = new double[getSmallCollumnSize()];
//Put data of image into 2d array
int smallImageCounter = 0;
for (int y = 0; y < getSmallCollumnSize(); y++) {
for (int x = 0; x < getSmallRowSize(); x++) {
a2dArrayForWally[y][x] = wallyImage[smallImageCounter];
smallImageCounter++;
//cout << a2dArray[x][y];
}
}
给出错误的行在最终的 for 循环中
a2dArrayForWally[y][x] = wallyImage[smallImageCounter];
所以很明显这与内存的存储位置有关,但我是C++新手,在谷歌搜索后,我似乎找不到我的代码有什么问题。
任何帮助将不胜感激!
编辑:
通过尝试自己解决错误,我发现当smallImageCounter
达到430时会出现问题。在存储数据之前没有问题
你把new double()
和new double[]
混淆了。第一个分配单个double
并将其初始化为括号中的值,其中第二个从方括号中分配大小为double
s 的动态数组。
改变:
double* baseImage = new double(largeImageRowSize * largeImageCollumnSize);
double* wallyImage = new double(smallImageRowSize * smallImageCollumnSize);
自:
double* baseImage = new double[largeImageRowSize * largeImageCollumnSize];
double* wallyImage = new double[smallImageRowSize * smallImageCollumnSize];
相关文章:
- 检测到堆损坏:在正常块 c++ 动态 2D 数组之后
- 损坏的结构字符数组 - sqlite C++
- C++ 删除[] 2D 数组导致堆损坏
- 已编辑 我如何将其拆分为 char 和 int 数组
- 类数组正在损坏数据
- 试图引用已删除函数数组的相等运算符
- 调用delete[]时,某些东西导致堆损坏,但我已正确设置了数组的维度
- 数组变量周围的堆栈已损坏
- C++访问冲突读取位置0xDDDDDDCD当我尝试删除已更新的数组时
- 如何在数组中搜索之前已输入的 int 值
- Arduino 数组中的值损坏
- 为什么我不能使用已删除或私有析构函数分配类的数组?
- malloc()内存损坏仅通过为特定数量编写int数组
- 填充另一个 2D 数组后,堆已损坏
- 在复制 delete[] 数组后在 C++ 中检测到堆损坏
- 数组问题:变量周围的堆栈'arr'已损坏
- 检查数字是否已在数组中的程序
- C++指针:数组的堆栈已损坏
- x86英特尔程序集和C++-数组周围的堆栈已损坏
- 访问数组时出错 - 变量"分数"周围的堆栈已损坏