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

标签 c++ memory-management function-pointers

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

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

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

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

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 指针位于图像结束后的 末尾,而不是开头!

关于C++ 指针算术循环访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15605534/

相关文章:

c++ - 从不同的容器 move 构造 `std::map`

c++ - 在 ';' token c++ 之前预期的错误主表达式

c++ - 未定义对 Logger::getInstance() 的引用 - 但仅在某些情况下

c - 当您尝试在 c 中释放()已经释放的内存时会发生什么?

c - 使用函数指针

c++ - 将数据清零时奇怪的 XOR 交换行为

linux pmap 了解在特定虚拟地址空间中运行的内容

c内存泄漏问题

c++ - 推导函数指针返回类型

c++ - 不带星号的函数指针参数