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