填充另一个 2D 数组后,堆已损坏



我正在编写一个程序,我需要获取 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并将其初始化为括号中的值,其中第二个从方括号中分配大小为doubles 的动态数组。

改变:

double* baseImage = new double(largeImageRowSize * largeImageCollumnSize);
double* wallyImage = new double(smallImageRowSize * smallImageCollumnSize);

自:

double* baseImage = new double[largeImageRowSize * largeImageCollumnSize];
double* wallyImage = new double[smallImageRowSize * smallImageCollumnSize];

最新更新