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