C - 将多个图像放在数组指针中

C++ - place multiple images in an array pointer

本文关键字:数组 指针 图像      更新时间:2023-10-16

我一直在尝试使用土壤库中读取十个磁盘上的图像。然后,我想使用3D纹理在OpenGL中渲染所得数据。

我编写的代码以读取磁盘的图像并将其存储在缓冲区中,从而引发Access violation reading location 0x00000000错误。

这是使用土壤将多个图像存储到阵列指针中的正确方法?

unsigned char *tex;
int imSize = h*w;
unsigned char *buff = new unsigned char[h * w * slices];
for(int i = 1; i<=10; i++)
{
    for(int j = 0; j<imSize; j++)
    { 
        if (i==1)
        {   
            tex = (unsigned char*) SOIL_load_OGL_texture("Data/PA_170090.png",
                    SOIL_LOAD_AUTO,SOIL_CREATE_NEW_ID,SOIL_FLAG_INVERT_Y);
            buff[((i-1)*imSize) + j] = tex[j]; }
        if (i==2)
        {   tex = (unsigned char*)SOIL_load_OGL_texture("Data/PA_170091.png",
                    SOIL_LOAD_AUTO,SOIL_CREATE_NEW_ID,  SOIL_FLAG_INVERT_Y);
            buff[(i-1)*imSize + j] =  tex[j]; }
        if (i==3)
        {   tex = (unsigned char*)SOIL_load_OGL_texture("Data/PA_170092.png",
                    SOIL_LOAD_AUTO,SOIL_CREATE_NEW_ID,  SOIL_FLAG_INVERT_Y);
            buff[(i-1)*imSize + j] =  tex[j];}
        ....
        .... // up to 10 images
    }
}

看来SOIL_load_OGL_texture没有返回任何缓冲区。相反,它返回一个ID(GLuint类型的ID,即unsigned int)。如果功能失败,则ID为零。您正在将整数值施放给指针并取消给它,从而导致访问违规。