Как исправить эту ошибку выполнения?

Каждый раз, когда я компилирую свой простой код SDL1.2, он успешно компилируется
но когда я пытаюсь запустить его через терминал (альт+T в Ubuntu):

./game
Segmentation fault (core dumped)

Я получаю эту ошибку. Можете ли вы помочь, пожалуйста? Это код:

#include<SDL/SDL.h>

int main(int argc,char args)
{
SDL_Init( SDL_INIT_EVERYTHING);
SDL_Surface* screen;
screen=SDL_SetVideoMode(640,480,32,SDL_HWSURFACE);
SDL_Flip(screen) ![problem running the program][1];
SDL_Delay(5000);
SDL_FreeSurface(screen);
SDL_Quit();
}

-1

Решение

SDL_SetVideoMode возвращается NULL на ошибку, которую вы не проверяете.

1

Другие решения

Поскольку вы запускаете это через терминал, я подозреваю, что вы, возможно, забыли сказать Xorg разрешить запуск с него. На самом деле, если это действительно проблема, это предотвратит любой программа запускается при запуске таким образом.

Чтобы решить проблему, введите это в терминал (это нужно сделать только один раз за сеанс):

xhost +

Вы должны получить сообщение, что это было успешно. Я не могу вспомнить точное сообщение, но это что-то вроде этого:

Clients are now allowed to connect from any host.

Что происходило (при условии, что я был прав в отношении xhost) было что SDL_SetVideoMode() звонок не удался и вернулся NULLпотому что Xorg отклонил соединение. Поскольку вы не проверяете это, SDL_Flip() закончил разыменование NULL указатель — отсюда и ошибка.


ПРИМЕЧАНИЕ: В вашем коде есть ошибка, а именно — вам следует не вызов SDL_FreeSurface(screen);; эта конкретная поверхность особенная, и освобождается SDL_Quit(); автоматически. Источник (см. Раздел «Возвращаемое значение»): http://www.libsdl.org/release/SDL-1.2.15/docs/html/sdlsetvideomode.html

1

Проверить, если SDL_SetVideoMode() не удалось!

screen = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
if (screen == NULL) /* error  */;
0

Запустите его под Valgrind. Или ГБД. Или другой отладчик на ваш выбор.

Вы, вероятно, должны быть успешно выделяя память для экрана.

0
По вопросам рекламы [email protected]