You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否需对sd_device_enumerator_get_device_first返回引用调用sd_device_unref?

关于sd_device_enumerator_get_device_first返回值的引用释放问题
  • 核心结论:sd_device_enumerator_get_device_first返回的设备引用不需要手动调用sd_device_unref释放,该引用归枚举器对象所有,当枚举器被sd_device_enumerator_unref销毁时,会自动释放所有关联的设备引用。
  • 内存问题原因:你手动调用sd_device_unref(dev)后出现内存问题,大概率是重复释放了引用——枚举器本身会管理设备的生命周期,手动释放会导致后续枚举器操作时访问已释放内存,引发释放后使用或双重释放问题。
  • 测试用例的佐证:你提到的systemd测试用例中没有调用sd_device_unref,正是遵循了这个规则。测试代码仅在结束时释放枚举器对象,由枚举器负责清理所有关联的设备资源。
  • 正确用法示例:
    sd_device_enumerator *e = NULL;
    sd_device *dev = NULL;
    
    sd_device_enumerator_new(&e);
    // 设置枚举器过滤规则
    dev = sd_device_enumerator_get_device_first(e);
    
    // 遍历设备
    while (dev) {
        // 处理设备逻辑
        dev = sd_device_enumerator_get_device_next(e);
    }
    
    // 仅需释放枚举器,无需手动释放每个dev
    sd_device_enumerator_unref(e);
    

内容的提问来源于stack exchange,提问作者ptiv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:52:03