2012-09-08 45 views
1

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

#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); 
} 
+0

我以为我几分钟前看到过这个问题? – cnicutar

+0

那么'FT_New_Face'的返回值不得不说什么? – chris

回答

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库对象。由该函数注册的 模块集在构建时确定。

输出库对新库对象的句柄。

返回FreeType错误代码。 0表示成功。

您可以先使用此库以下tutorial。请注意检查返回值...

+0

是的,你说得对。我已经完成了教程,这是我第一次尝试从头开始编写一些东西。看起来我忘了初始化。谢谢! –

1

您尚未初始化您的库。

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

您还必须检查函数的返回值,如上所示。例如,FT_New_Face会返回错误(因为它可能会出现在您的情况中),所以您不能访问face,因为它处于未定义状态。