无符号16位整数和SDL_TTF的奇数行为

时间:2014-09-26 20:57:19

标签: c++ sdl true-type-fonts sdl-ttf

我正在编写一个在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);

0 个答案:

没有答案