Как сохранить экземпляр ArduinoJson в структуре или скопировать документ?
Я пытаюсь сохранить объекты JSON в структуре C++ с помощью ArduinoJSON, и у меня возникают некоторые проблемы.
Моя первоначальная структура была следующей:
struct Doc {
ArduinoJson::DynamicJsonDocument data;
};
но это вызвало ошибку: " malloc: *** error for object 0xffffffffffff0098: pointer being freed was not allocated Make The Thing(18437,0x104da9880) malloc: *** set a breakpoint in malloc_error_break to debug"
*doc_instance->doc = ArduinoJson::DynamicJsonDocument(doc_byte_size);
Думаю, ему не нравится копирование.
Я пробовал использовать set
тоже, но при этом получается пустой документ. Я не понимаю, что здесь происходит. ArduinoJSON просто вообще не поддерживает постоянство?
Это мой полный код:
usize doc_byte_size = 64 * byte_length;
if (!info->is_valid) {
info->doc = (Data*)malloc(sizeof(Data));
}
do {
auto doc = ArduinoJson::DynamicJsonDocument(doc_byte_size);
DeserializationError deserialization_error = ArduinoJson::deserializeJson(doc, (const char* const)data);
if (deserialization_error) {
error("deserializeJson() failed: %s\n", deserialization_error.c_str());
if (strcmp(deserialization_error.c_str(), "NoMemory") != 0) {
doc_byte_size *= 2;
return false;
}
} else {
info->doc->data.set(doc); // I thought this would copy the document
print("received NLP data\nBEGIN{\n");
std::cout << doc << std::endl; // Prints correct data
std::cout << info->doc->data << std::endl; // prints an empty {}
MTT_print("\n}END\n");
break;
}
} while (true);
РЕДАКТИРОВАТЬ:
Эта документация предполагает, что я смогу сделать копию, поэтому здесь определенно что-то не так.
EDIT2: функция десериализации вылетает, когда я передаю строку...