c++指针算术循环访问冲突
C++ pointer arithmetic loop access violation
我试图在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
将遍历img
到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
相关文章:
- 写入位置0x0000000C时发生访问冲突
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 链表中写入访问冲突的未知原因
- C++中的openCV Mat访问冲突
- 如何循环访问常量字符**?
- C++尝试深度复制唯一指针时出现内存访问冲突
- 如何在 c++ 中仅循环访问特定列?
- C++ 中动态二维数组的访问冲突
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- C++ - 循环访问指针数组会导致错误
- 视觉 如何循环访问C++中遵循类似格式的多个.txt文件?
- 如何在C++中循环访问未知对象方法?
- 写入访问冲突异常
- 在类 12.exe 中0x7B37FF80 (ucrtbased.dll) 引发异常: 0xC0000005:访问冲突读
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 读取访问冲突.这0xCDCDCDCD
- 对于每个循环读取访问冲突
- 签入循环时违反 nullptr 读取访问冲突
- 循环中的 BadPtr 访问冲突,将字符**转换为 std::vector<string>
- c++指针算术循环访问冲突