Segfault非常简单的来源

时间:2012-09-08 20:44:32

标签: c segmentation-fault freetype

我正在尝试使用FreeType库编写一个简单的脚本。在执行FT_Set_Pixel_Sizes方法期间发生了段错误,尽管我正确使用它。任何帮助都会很棒。这是完整的代码:

#include <ft2build.h>
#include FT_FREETYPE_H

main() {

    FT_Library library;
    FT_Face face;
    FT_GlyphSlot slot;
    FT_UInt glyph_index = 30;
    char* font_file = "/usr/share/fonts/truetype/freefont/FreeMono.ttf";

    // Render font
    FT_New_Face(library, font_file, 0, &face);

    FT_Set_Pixel_Sizes(face, 0, 16); /* THIS LINE IS CAUSING THE SEGFAULT */

    slot = face->glyph;
    FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT);
    FT_Render_Glyph(face->glyph, FT_RENDER_MODE_NORMAL);
}

2 个答案:

答案 0 :(得分:3)

您没有初始化Library变量:请参阅FT_LIBRARY documentation。您应该使用FT_Init_FreeType

  

FT_Init_FreeType

     

在FT_FREETYPE_H(freetype / freetype.h)中定义。

     

FT_EXPORT(FT_Error)FT_Init_FreeType(FT_Library * alibrary);

     

初始化一个新的FreeType库对象。这是一组模块   此功能注册的是在构建时确定的。

     

输出alibrary新库对象的句柄。

     

返回FreeType错误代码。 0意味着成功。

您可以先跟随此tutorial习惯此库。注意检查返回值......

答案 1 :(得分:1)

您尚未初始化图书馆。

FT_Library library;
error = FT_Init_FreeType(&library);
if (error) { /* report error and exit */ }

您还必须检查上述功能的返回值。例如,FT_New_Face返回错误(因为它可能在您的情况下),您不能访问face,因为它处于未定义状态。