0

我尝试使用 cairo 在屏幕上绘制文本,但 mac Os X 仪器告诉我,我有由 pango_layout_get_pixel_size 或 pango_layout_get_baseline 引起的悬空指针 ..实际上是第一个需要 PangoLines 并将它们存储在 Layout 变量中的函数。在文档和示例中显示的每个代码中,您都必须在最后使用 g_object_unref(layout) ......但仍然......那些由 itemized_state_init 分配的指针(在 pango_layout_get_pixel_size 内)没有被释放。

难道我做错了什么 ?

double posX = somevalue;
double posY = somevalue;
cairo_save (CurCairoState);
PangoLayout *layout = pango_cairo_create_layout (CurCairoState);
pango_layout_set_text (layout, text, -1);
pango_layout_set_font_description (layout, curCairoContext->font);
int width, height;

pango_layout_get_pixel_size (layout, &width, &height);

int b = (int)(pango_layout_get_baseline (layout) / PANGO_SCALE);

/* applying alignment attribute */
switch (curCairoContext->textAnchor) {
case GMiddle:
   posX = posX - (width / 2.0);
   break;
case GEnd:
   posX = posX - width;
   break;
}

cairo_move_to (CurCairoState, posX, posY - b);
pango_cairo_show_layout (CurCairoState, layout);

g_object_unref (layout);
cairo_restore (CurCairoState);

以及 Instrument 中的分配结果

在此处输入图像描述

感谢任何回复!

编辑:这是使用 G_SLICE=always-malloc G_DEBUG=gc-friendly 后的新屏幕截图。那些悬空的指针变成了“仪器”的漏洞

在此处输入图像描述

编辑(未找到解决方案):

我下载了 pango-1.40.3 的源代码,编译它并用我自己的标记安装它,我不明白为什么我在 MacOS 上有那些悬空指针,因为我正在经历:pango_layout_finalizepango_layout_clear_lineslayout- >ref_count=0当我调用g_obejct_unref (布局)

4

0 回答 0