0

我正在尝试在 C++ 中使用浮点数的连续内存块。内存代表我正在使用的专有图像库的像素数据。我无法改变库为它的创建例程使用指向第一个浮点数的指针这一事实。例如,一个 20x20 的图像将作为 400 个连续的浮点数保存在内存中。

如下所示,我正在使用循环来测试此内存的填充。

我在每次循环迭代时递增指针,但是我在运行时遇到访问冲突 - 显然我以某种方式过度运行堆。我担心我没有正确增加指针,或者误解了这一点。

我哪里错了?我会很感激有一双新的眼睛看过这个:)谢谢

int width = 500;
int height = 500;
float *img = (float*) calloc(width * height, sizeof(float));

int count = 0;
while (count < (width * height))
{
    *img = 1.0f;
    count++;
    img++;
}

saveImage(width, height, img, TEXT("test.tiff"));

free(img);
4

2 回答 2

4

您正在循环中更改 img 。当您调用 saveImage 时,img 指针位于图像末尾之后,而不是开头!

于 2013-03-24T23:47:41.463 回答
3

我在每次循环迭代时递增指针,

这就是问题所在;img不再像saveImage预期的那样指向图像的开头。我确定saveImage它将遍历imgto img + (width * height - 1),因此它正在运行超出您分配的内存的边界。

使用临时指针或索引:

int count = 0;
while (count < (width * height))
{
    img[count] = 1.0f;
}

saveImage(width, height, img, TEXT("test.tiff"));
free(img); // and now this is correct as well
于 2013-03-24T23:47:30.613 回答