c++指针算术循环访问冲突

C++ pointer arithmetic loop access violation

本文关键字:循环 访问冲突 指针 c++      更新时间:2023-10-16

我试图在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);

您正在循环中更改img。当你调用saveImage时,img指针是在图像结束后的,而不是在开始!

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

这就是问题所在;img不再像saveImage所期望的那样指向图像的开始。我确信saveImage将遍历imgimg + (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