Место записи нарушения доступа SDL 0x02a251c8 - PullRequest
0 голосов
/ 09 декабря 2011

Я прочитал каждый вопрос о месте записи о нарушении прав доступа, который мог найти, и, возможно, я что-то упустил, но, похоже, у меня возникла другая ошибка.Я инициализировал все мои указатели (насколько я могу судить).

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.
}

Программа отображает набор Мандельброта.Это функция, которую я использовал для доступа к данным пикселей.Когда я впервые написал программу, она была в int main (), и с этой самой функцией она работала нормально.Я намеревался написать это как упражнение, используя SDL и указатели, поэтому я разделил его и сделал Мандельброта своим собственным классом, чтобы немного узнать об ООП.Только когда я разделил это, у меня начались эти проблемы.Есть ли что-то очевидное, что мне не хватает?Я был бы рад опубликовать остальную часть кода, я просто не хочу заваливать вас, ребята, кодом, который не имеет значения.Когда я прослеживаю проблему назад, она указывает на функцию putpixel в реальном коде для рисования набора, что имеет смысл.Может быть, проблема возникла там?

РЕДАКТИРОВАТЬ: поцарапать это.Я сделал некоторую обработку ошибок, и я определенно правильно блокирую поверхность.

Ответы [ 2 ]

2 голосов
/ 09 декабря 2011

Забота о манипулировании данными напрямую, в зависимости от типа поверхности, вам необходимо SDL_LockSurface / SDL_UnlockSurface.

В случае, если что-либо не изменит ваше местоположение ошибки, проверьте/ выведите значение для y, surface->w и x

0 голосов
/ 10 декабря 2011

Проблема решена. Я полный идиот. Причина, по которой я получил эту ошибку, заключалась в том, что я превысил границы массива пикселей. Проблема возникла из-за того, как я определил свою функцию, которая устанавливает параметры набора. Я устанавливал высоту как ширину, а ширину как высоту. Я знал, что это было что-то очевидное. Пусть это будет уроком для других начинающих программистов, таких как я. Если вы получаете такую ​​странную загадочную ошибку, как эта, рассмотрите простые вещи. Такое упущение может стоить вам много времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...