前提・実現したいこと
SDL2を使って、画面に文字を表示するプログラムを作っています。
発生している問題・エラーメッセージ
コンパイルはできたのですが、起動するとSegmentation fault:11と表示され起動できません。
エラーメッセージはこちらに書いてあります。
該当のソースコード
C
1#include "SDL2/SDL.h" 2#include "SDL2/SDL_ttf.h" 3 4int main(int argc, const char *argv[]) 5{ 6 SDL_Window *Window; 7 SDL_Surface *image; 8 SDL_Rect rect, rect_pos; 9 SDL_Event event; 10 SDL_Color white = {255, 255, 255}; 11 TTF_Font *font; 12 SDL_Renderer *renderer; 13 SDL_Texture *texture; 14 int isFinish = 0; 15 16 SDL_Init(SDL_INIT_EVERYTHING); 17 TTF_Init(); 18 19 renderer = SDL_CreateRenderer(Window, -1, SDL_RENDERER_ACCELERATED); 20 Window = SDL_CreateWindow("Font", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN); 21 font = TTF_OpenFont("rounded-x-mplus-1c-black.ttf", 24); 22 23 image = TTF_RenderUTF8_Blended(font, "あいうえお", white); 24 texture = SDL_CreateTextureFromSurface(renderer, image); 25 26 SDL_FreeSurface(image); 27 28 rect.x = 0; 29 rect.y = 0; 30 rect.w = image->w; 31 rect.h = image->h; 32 33 rect_pos.x = 0; 34 rect_pos.y = 0; 35 36 SDL_RenderClear(renderer); 37 SDL_RenderCopy(renderer, texture, NULL, &rect); 38 SDL_RenderPresent(renderer); 39 40 while (isFinish == 0) 41 { 42 while (SDL_PollEvent(&event)) 43 { 44 switch (event.type) 45 { 46 case SDL_KEYDOWN: 47 switch (event.key.keysym.sym) 48 { 49 case SDLK_ESCAPE: 50 isFinish = 1; 51 } 52 } 53 } 54 55 SDL_Delay(1); 56 } 57 58 SDL_DestroyRenderer(renderer); 59 SDL_DestroyTexture(texture); 60 SDL_DestroyWindow(Window); 61 62 SDL_Quit(); 63 64 return 0; 65}
試したこと
rendererやtextureを使用せず、surfaceで表示することも試してみました。こちらはウインドウは表示されましたが、文字が表示されていません。
C
1#include "SDL2/SDL.h" 2#include "SDL2/SDL_ttf.h" 3 4int main(int argc, const char *argv[]) 5{ 6 SDL_Window *Window; 7 SDL_Surface *image, *screen; 8 SDL_Rect rect, rect_pos; 9 SDL_Event event; 10 SDL_Color white = {255, 255, 255}; 11 TTF_Font *font; 12 int isFinish = 0; 13 14 SDL_Init(SDL_INIT_EVERYTHING); 15 TTF_Init(); 16 17 Window = SDL_CreateWindow("Font", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN); 18 font = TTF_OpenFont("rounded-x-mplus-1c-black.ttf", 24); 19 20 image = TTF_RenderUTF8_Blended(font, "あいうえお", white); 21 22 rect.x = 0; 23 rect.y = 0; 24 rect.w = image->w; 25 rect.h = image->h; 26 27 rect_pos.x = 0; 28 rect_pos.y = 0; 29 30 SDL_BlitSurface(image, NULL, screen, &rect_pos); 31 SDL_UpdateWindowSurface(Window); 32 SDL_FreeSurface(image); 33 34 while (isFinish == 0) 35 { 36 while (SDL_PollEvent(&event)) 37 { 38 switch (event.type) 39 { 40 case SDL_KEYDOWN: 41 switch (event.key.keysym.sym) 42 { 43 case SDLK_ESCAPE: 44 isFinish = 1; 45 } 46 } 47 } 48 49 SDL_Delay(1); 50 } 51 52 SDL_DestroyWindow(Window); 53 54 SDL_Quit(); 55 56 return 0; 57}
補足情報(FW/ツールのバージョンなど)
gccでコンパイルしています
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/06/03 13:52