2011-12-09 51 views
0

我已经通读了每个访问冲突写在这里我可以找到的位置问题,也许我错过了一些东西,但我似乎遇到了不同的错误。我初始化了所有的指针(据我所知)。SDL访问冲突写入位置0x02a251c8

void putpixel(SDL_Surface* surface, int x, int y, Uint32 pixel) 
{ 
    int k = GetWidth(surface); 
    //Convert the pixels to 32 bit 
    Uint32 *pixels = (Uint32 *)surface->pixels; 

    //Set the pixel 
    pixels[ (y * surface->w) + x ] = pixel; //This is the line the debugger points to. 
} 

该程序显示Mandelbrot集。这是我用来访问像素数据的功能。当我第一次编写程序时,它全部在int main()中,并且使用这个函数很好地工作。我打算用SDL和指针编写这个练习,所以我将它分解并将Mandelbrot作为自己的类来学习一些关于OOP的知识。只有一次我把它分开了,我开始有这些问题。有什么明显的我失踪了吗?我很乐意发布其余的代码,我只是不想用无关紧要的代码淹没你们。当我追溯问题时,它指向实际代码中的putpixel函数以绘制集合,这很有道理。问题是否源于此?

编辑:划痕。我做了一些错误处理,并且我确实锁定了曲面。

回答

2

小心直接操作数据,具体取决于表面的类型,需要SDL_LockSurface/SDL_UnlockSurface。

在未进行任何更改您访问的位置错误,请检查/打印值ysurface->wx

+0

看我的编辑。我想我正确锁定了表面,但我觉得我犯了一个愚蠢的错误。 –

0

问题解决了。我是一个完全白痴。我得到这个错误的原因是因为我超过了像素数组的边界。这个问题来自于我如何定义设置集合参数的函数。我将高度设置为宽度和宽度。我知道这是明显的。让这对其他像我这样的新手程序员来说是一个教训。如果你得到这样一个奇怪的神秘错误,检查简单的东西。像这样的监督会花费你很多时间。