2

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);
4

0 に答える 0