Я сейчас отлаживаю код C. Это в основном клиент с платформы сбора данных, и я получал странные сообщения об ошибках из связанного списка. В основном проблема заключается в том, что указатель «следующий» последнего элемента изменяется в некоторой неизвестной точке с NULL на 0xFFFFFFFFF. Затем я попытался скомпилировать свою библиотеку с помощью средства очистки адреса, чтобы определить, где может быть ошибка и ошибка исчезла, или было бы лучше сказать, что ошибка в настоящее время скрыта. Является ли это возможным? Как библиотека Asan может повлиять на код, чтобы не сделать cra sh? заранее спасибо.
РЕДАКТИРОВАТЬ: Извините за плохое описание, я постараюсь go глубже. Я отлаживал код и нашел, где проблема. Он находится в функции синтаксического анализа из файла конфигурации 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;
Настоящая проблема в List 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;
все работает ...