调用libfprint的fp_context_enumerate为何导致内存泄漏?
解决libfprint调用fp_context_enumerate后的内存泄漏问题
你的问题核心是没有正确释放libfprint分配的GObject资源,尤其是FpContext对象以及fp_context_enumerate生成的设备相关内存。
libfprint基于GLib的GObject框架,所有通过_new创建的对象都采用引用计数管理生命周期——你用fp_context_new创建了上下文,但没有调用对应的fp_context_unref来释放引用,导致上下文内部持有的设备枚举资源无法被回收,最终触发内存泄漏。
修正后的代码如下:
#include <libfprint-2/fprint.h> #include <glib-2.0/glib-unix.h> void start_device() { FpContext *ctx = fp_context_new(); if (ctx) { // 先判断上下文创建是否成功 fp_context_enumerate(ctx); fp_context_unref(ctx); // 释放上下文,同时清理内部枚举的设备资源 } } int main() { start_device(); return 0; }
补充说明:
fp_context_enumerate会枚举系统中的指纹设备并分配相关内存结构,这些结构的生命周期和FpContext绑定,当你调用fp_context_unref时,上下文会自动清理这些设备资源。- AddressSanitizer输出中的
<unknown module>是因为libfprint库可能没有携带ASAN兼容的调试符号,所以无法显示具体的泄漏点,但根源就是未释放FpContext对象。
内容的提问来源于stack exchange,提问作者Parker
相关产品推荐
相关产品推荐

