我目前正在调试 C 代码。这基本上是来自数据收集平台的客户端,我从链接列表中读取到奇怪的错误。问题基本上是最后一项的“下一个”指针在某个未知点从 NULL 更改为 0xFFFFFFFFF。然后我尝试使用地址清理程序编译我的库,以便找到错误错误可能在哪里并且错误消失了,或者最好说错误当前是隐藏的。可能吗?Asan 库如何影响代码以使其不崩溃?提前致谢。
编辑:抱歉描述不佳,我会尝试更深入。我一直在调试代码,我发现问题出在哪里。它位于 json 配置文件的解析函数中(为此我使用 jansson 库)。json格式是这样的:
{
...
"version": {
"software": "0.2",
"firmware": "0.2"
},
"system": ["system_A", "system_B"],
...
"internal_devices : [
{
...
"version": {
"software": "0.2",
"firmware": "0.2"
},
"system": ["system_B"],
...
},
...
"version" : {
"software": "0.2",
"firmware": "0.2"
},
"system": ["system_A"],
...
}
]
}
}
我有一个这样的结构来存储这些数据
typedef struct XXX_NODE {
mqtt_client_t * client;
XXX_Device devices[XXX_MAX_DEVICES];
size_t num_devices;
XXX_operation_mode mode;
pthread_mutex_t callback_lock;
pthread_mutex_t registration_lock;
pthread_cond_t registration_condition;
}XXX_NODE;
typedef struct XXX_id {
...
struct XXX_parent parent_unit;
// char parent_fin[64];
int internal_level_tree;
XXX_version version;
List XXX_systems;
List extended_topics;
bool registered;
}XXX_id;
真正的问题在于列表 XXX_systems。我每个设备都有一个列表,我可以在同一个结构中拥有多个设备,其中第一个元素(在 XXX_Device 设备数组中)是主要单元。正是在这个设备中,我丢失了信息。解析功能看起来工作正常。在函数结束时,结构具有权限值,但是当我释放 json“对象”时,我失去了 的引用XXX_systems->next
,但奇怪的是,如果我不释放一些 json“对象”,一切正常.. .
因此,在这种情况下,我丢失了信息:
json_decref(internal_list);
json_decref(unit);
json_decref(root);
return 0;
但是如果我这样评论 json_decref
json_decref(internal_list);
//json_decref(unit);
json_decref(root);
return 0;
一切正常...