SDL でフォントをレンダリングするプログラムを書いています。「ピクセル」の色とテキストを含む構造体があります。セグメンテーション違反が発生し、意味がわかりません。
struct pixInfo
{
SDL_Color bColor;
SDL_Color tColor;
Uint16 ch;
};
これがレンダリングコードです
fchar = TTF_RenderGlyph_Solid(com->font, im->ch, im->tColor); // Segmentation fault
com は、フォントを格納するメイン クラスへのポインタです。im は pixInfo 構造体への反復子です fchar は SDL_Surface* です im->ch が 9554 のようなものである場合、これはクラッシュします (ASCI 文字は正常に動作します)
ただし、このコードは機能します
fchar = TTF_RenderGlyph_Solid(com->font, 9554, im->tColor);
// OR
Uint16 num = 9554;
fchar = TTF_RenderGlyph_Solid(com->font, num, im->tColor);
これは動作しません:
Uint16 num = im->ch;
fchar = TTF_RenderGlyph_Solid(com->font, num, im->tColor); // Segmentation fault
これらの両方の例で「num」変数を出力に出力すると、それらは 9554 になります (注意してください、これを行うのは 9554 だけではありません)。
編集:別のアプローチを試しましたが、セグメンテーション違反も発生します
Uint16 num;
memcpy(&num, &im->ch, sizeof(Uint16));
fchar = TTF_RenderGlyph_Solid(com->font, num, im->tColor); // Segmentation fault
編集 2: このコードはクラッシュしません
Uint16 num;
memcpy(&num, &im->ch, sizeof(Uint16));
if (num == 9554)
{
std::cout << "9554" << std::endl;
num = 32;
}
fchar = TTF_RenderGlyph_Solid(com->font, num, im->tColor);
しかし、このコードはセグメンテーション違反をします
Uint16 num;
memcpy(&num, &im->ch, sizeof(Uint16));
if (num == 9554)
{
std::cout << "9554" << std::endl;
num = 32;
num = 9554;
}
fchar = TTF_RenderGlyph_Solid(com->font, num, im->tColor);