c++ - 有时我在反转数组时会遇到 EXEC_BAD_ACCESS (访问冲突)

标签 c++ arrays access-violation openexr

我正在使用 OpenEXR 库加载图像。

这工作正常,只是图像加载时旋转了 180 度。我使用下面所示的循环来反转数组,但有时程序会退出,xcode 会给我一个 EXEC_BAD_ACCESS 错误(我认为这与 msvc 中的访问冲突相同)。它不会每次都会发生,只是每 5-10 次发生一次。

理想情况下,我想就地反转数组,尽管这每次都会导致错误,并且使用 memcpy 会失败,但不会导致错误,只是一个空白图像。我想先知道是什么原因导致了这个问题。

这是我正在使用的代码:(Rgba 是由 4 个“Half”r、g、b 和 a 组成的结构,在 OpenEXR 中定义)

Rgba* readRgba(const char filename[], int& width, int& height){
    Rgba* pixelBuffer = new Rgba[width * height];
    Rgba* temp = new Rgba[width * height];

    // ....EXR Loading code....

    // TODO: *Sometimes* the following code results in a bad memory access error. No idea why.
    // Flip the image to conform with OpenGL coordinates.
    for (int i = 0; i < height; i++){
        for(int j = 0; j < width; j++){
            temp[(i*width)+j] = pixelBuffer[(width*height)-(i*width)+j];
        }
    }

        delete pixelBuffer;

        return temp;
}

提前致谢!

最佳答案

更改:

        temp[(i*width)+j] = pixelBuffer[(width*height)-(i*width)+j];

至:

        temp[(i*width)+j] = pixelBuffer[(width*height)-(i*width)+j - 1];

(提示:想想当 i = 0 且 j = 0 时会发生什么!)

关于c++ - 有时我在反转数组时会遇到 EXEC_BAD_ACCESS (访问冲突),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3329120/

相关文章:

c++ - 简单的指针初始化

c++ - 为什么此代码不起作用(请参阅详细信息)?

c++ - 我对缓冲区的理解是否正确?

arrays - F# array_chunk 用于序列

c++ - libpng 在 png_read_info() 上崩溃

c++ - 如何将 char 编码为 2 位?

java - 如何使用 Jersey Rest Webservices 和 Java 解析 JSON 数组

javascript - 从多维对象数组中删除重复项

c++ - C++ 多态性中的访问冲突(虚拟指针函数指向错误的位置?)

c++ - 访问冲突读取数组元素