Как сохранить экземпляр 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: функция десериализации вылетает, когда я передаю строку...

0 ответов

Другие вопросы по тегам