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

时间:2013-03-24 23:44:31

标签: c++ memory-management function-pointers

我正在尝试使用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);

2 个答案:

答案 0 :(得分:4)

你正在改变循环中的img。当你调用saveImage时,img指针在结束后的结尾处是,而不是在开头!

答案 1 :(得分:3)

  

我正在用每个循环迭代递增指针,

这就是问题; 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