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