我应该在调用 sdp_list_append 函数后释放内存吗?

Should I free memory after calling the sdp_list_append function?

我正在阅读 PyBluez 库的 source code 并注意到在这段代码内存中使用 malloc 分配,但从未释放:

 // add service classes, if any
for(i = 0; i < PySequence_Length(service_classes); i++) {
    uuid_t *svc_class_uuid = (uuid_t*) malloc( sizeof( uuid_t ) );
    PyObject *item = PySequence_GetItem(service_classes, i);
    pyunicode2uuid( item, svc_class_uuid );
    svc_class_list = sdp_list_append(svc_class_list, svc_class_uuid);
}
sdp_set_service_classes(&record, svc_class_list);

如果 sdp_list_append() 函数没有释放指针,我认为这是内存泄漏,但我找不到要检查的此函数的任何源代码。

在我的实现中,我应该在这个块的末尾添加 free(svc_class_uuid); 吗?

据我所知,代码将动态构建的项目 svc_class_uuid 附加到列表 svc_class_list。因此,当从列表中弹出一个项目或当列表停止存在或执行清理操作时,分配的内存将被释放。

由于此代码段中没有弹出操作,因此您不应自行释放分配的内存。列表上的操作负责释放分配的内存。