Я запускаю модульные тесты с использованием gtest (1.16) и jsoncpp (1.9.5) и время от времени (иногда 2-3 раза подряд, иногда после успеха 40 раз подряд), один модульный тест не удается/сбой и я не могу объяснить, почему. < /p>
Вот код, в котором он не сбои: < /p>
Код: Выделить всё
std::string buffer;
ASSERT_TRUE(converter.toJson(buffer));
Json::Value actualRoot;
Json::CharReaderBuilder builder;
std::istringstream istream(buffer);
Json::String errs;
ASSERT_TRUE(Json::parseFromStream(builder, istream, &actualRoot, &errs));
< /code>
output: < /p>
Value of: Json::parseFromStream(builder, istream, &actualRoot, &errs)
Actual: false
Expected: true
free(): double free detected in tcache 2
до того, как я использовал json :: reader , который устарел, и я также получил бесплатно (): двойное бесплатное обнаружено в Tcache 2 время от времени, но Assert никогда не был подтвержден, когда он разбился раньше ... При добавлении печати сразу после Assert он никогда не печатается при сбое теста. был 100% правильный. Что меня действительно сбивает с толку, когда я печатаю значение буфера, я всегда получаю {"cols": 3, "Матрица": [[1, 2, 3], [4, 5, 6], [7, 8, 9]], "Rows": 3} . И при копировании этого значения (после сбоя) и буфера с жестким кодированием с этим значением оно, похоже, не сбоя. Запуск тестов в Windows. Я нашел некоторую проблему на GitHub в jsoncpp с некоторой двойной бесплатной ошибкой, но это исправлено в версии, которую я использую. как Free (): неверный указатель , но намного реже. В производстве приложение никогда не разбилось из -за проблем с Free ().
Googletest не установлен, исходный код интегрирован с Cmake.
Подробнее здесь:
https://stackoverflow.com/questions/794 ... om-jsoncpp