FreeType FT_New_Memory_Face аварийно завершает работу

Я загрузил файл "arial.ttf" (взятый из моей папки /Windows/Fonts) в память, однако при передаче его в FT_New_Memory_Face происходит сбой (где-то в FT_Open_Face). Я не могу отладить это, какие-либо подсказки относительно того, что я могу делать неправильно?

unsigned char *fontBuffer = LoadFile("arial.ttf");
zip_uint64_t fSize = GetFileSize("arial.ttf");
FT_Library  library;   /* handle to library     */
FT_Face     face; 
int error = FT_Init_FreeType( &library );
if( error != 0 )
    printf("FT_Init_FreeType failed");

error = FT_New_Memory_Face( library,
                            (FT_Byte*)fontBuffer,
                            fSize,                  
                            0,                      
                            &face );

person lost_bits1110    schedule 06.09.2011    source источник


Ответы (2)


Оказывается, проблема была на моей стороне, в частности, метод LoadFile возвращал память из стека, а не из кучи. Библиотека работает нормально. Спасибо!

person lost_bits1110    schedule 08.09.2011
comment
Привет, несколько лет спустя, но не могли бы вы предоставить LoadFile? Я с той же проблемой. Я думаю, что мой загрузчик неправильный. - person Armen Avetisyan; 13.05.2017

Я искал ответ 1 день. Проблема была в разделе заметок. https://www.freetype.org/freetype2/docs/reference/ft2-base_interface.html#FT_New_Memory_Face Вы не должны освобождать память перед вызовом FT_Done_Face. FreeType не копирует буфер и использует указатель, который вы отправляете в FT_New_Memory_Face

person Алексей Боженко    schedule 23.10.2018
comment
У меня была точно такая же проблема. Спасибо за публикацию! - person Roy Varon; 28.10.2020