Boost :: json :: serialize возвращается из непустых Boost :: json :: Объект в Tests Google [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Boost :: json :: serialize возвращается из непустых Boost :: json :: Объект в Tests Google [закрыто]

Сообщение Anonymous »

Я пытаюсь написать тест для сериализации JSON, используя Boost :: JSON и GTEST в MSVC, однако JSON :: Serialize возвращает для неэпти JSON :: Value/Object. Код запускает Fine Main (сериализуется и анализации, как и ожидалось); Однако, когда я запускаю аналогичный код в тестировании я получаю исключение SEH с кодом 0xc0000005.
Этот GTEST бросает ошибку времени выполнения: «Неизвестный файл: ошибка: исключение SEH с кодом 0xc0000005, добавленное в тестовый орган».TEST(CardTests, JsonSave) {
Card card("word", "hint", "text", "translation");

json::object json = card.to_json();//
Card test1(json); // constructs correctly
EXPECT_EQ(card, test1);//equal as expected

string s = json::serialize(json);// null string with length 142
ASSERT_NE(s.size(), 0);//passes

json::value parsed = json::parse(s);//SEH exception with code 0xc0000005 (I'm guessing something to do with a null pointer dereference

Card test2(parsed); //not reached
EXPECT_EQ(card, test2); //not reached
}

Однако при вызове следующей функции в основной возвращает true с ожидаемым сообщением.
bool test_card_json() {
Card card("test","hint","text", "translation");

json::object json_data = card.to_json();

if (card != Card(json_data)) return false;

string s = json::serialize(json_data);
if (s.size() == 0) return false;

json::value parsed{};
try { parsed = json::parse(s);}
catch (...) { return false; }

if (card != Card(parsed.as_object())) return false;

std::cout
Оба файла имеют: < /p>
namespace json = boost::json;
using string = std::string;
< /code>
Я не уверен, есть ли что -то прикольное с настройками между решениями, или есть ошибка доступа к памяти в обоих тестах, что приводит к сбою в GTEST. Если это важно, я запускаю тесты в отдельном проекте в рамках того же решения Visual Studio 2022, используя в режиме отладки в C ++ 23. Запуск двух тривиальных проходов и Fail GTESTS дает ожидаемые результаты. < /P>
Извините, если какая -либо информация отсутствует. Я довольно новичок в программировании, и это мой первый пост о переполнении стека.TEST(Serialize) {
json::object obj{ {"key", "value"} };//obj = {sp_={i_=0 } k_=object (7 '\a') t_=0x0000025f96d1dba0 {size=1 capacity=1 salt=2609575484320 } }

json::serialize(obj); //Exception thrown: read access violation. **_Val** was 0xFFFFFFFFFFFFFFFF.
}
< /code>
, где _val от STD Utility LN 769-776. < /p>
_EXPORT_STD template
_CONSTEXPR20 _Ty exchange(_Ty& _Val, _Other&& _New_val)
noexcept(conjunction_v) {
// assign _New_val to _Val, return previous _Val
_Ty _Old_val = static_cast(_Val);
_Val = static_cast(_New_val);
return _Old_val;
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... nobject-in
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»