У меня есть файл main.c
, который я хочу скомпилировать с gcc main.c -lSDL2 -lSDL2_image -lSDL2_ttf
, но когда я запускаю исполняемый файл, я получаю ошибку Speicherzugriffsfehler (Speicherabzug geschrieben)
. Когда я пытаюсь отладить с помощью GDB, я получаю
Starting program: /home/qubyte/test
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
[New Thread 0x7ffff708c700 (LWP 13549)]
[New Thread 0x7ffff460e700 (LWP 13550)]
[New Thread 0x7ffff2f3a700 (LWP 13553)]
Thread 1 "u" received signal SIGSEGV, Segmentation fault.
0x00007ffff7e0fef9 in ?? () from /usr/lib/libSDL2_ttf-2.0.so.0
После того, как я искал ошибку в файле, я обнаружил, что segfault всегда появляется в этом методе:
TTF_Font* font[1000];
SDL_Surface* surface[1000];
SDL_Texture* text[1000];
void SDL_DrawText(int number, char *ttfPath, char *Text,int TextSize ,SDL_Color color, int X, int Y)
{
int w,h;
font[number] = TTF_OpenFont(ttfPath, TextSize);
surface[number] = TTF_RenderText_Solid(font[number],Text,color);
text[number] = SDL_CreateTextureFromSurface(renderer,surface[number]);
SDL_QueryTexture(text[number],NULL,NULL,&w,&h);
TextRect[number].x = X;
TextRect[number].y = Y;
TextRect[number].w = w;
TextRect[number].h = h;
SDL_RenderCopy(renderer,text[number],NULL,&TextRect[number]);
SDL_FreeSurface(surface[number]);
SDL_DestroyTexture(text[number]);
TTF_CloseFont(font[number]);
}
Я не испортил указатели?