【问题标题】:Should I free memory after calling the sdp_list_append function?调用 sdp_list_append 函数后我应该释放内存吗?
【发布时间】:2022-01-12 08:45:15
【问题描述】:

我正在阅读 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);

【问题讨论】:

    标签: c memory-management memory-leaks bluetooth bluez


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      • 2017-04-01
      • 1970-01-01
      • 2018-08-29
      • 1970-01-01
      • 2017-06-04
      相关资源
      最近更新 更多