sdl2_ttf C вызывает segfault - PullRequest
0 голосов
/ 01 июня 2019

У меня есть файл 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]);
}

Я не испортил указатели?

...