是否需对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
相关产品推荐
相关产品推荐

