Модульные тесты когда -то сбои с двойным бесплатным, прибывающим от JSONCPP [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Модульные тесты когда -то сбои с двойным бесплатным, прибывающим от JSONCPP [закрыто]

Сообщение Anonymous »

Я запускаю модульные тесты с использованием gtest (1.16) и jsoncpp (1.9.5) и время от времени (иногда 2-3 раза подряд, иногда после успеха 40 раз подряд), один модульный тест не удается/сбой и я не могу объяснить, почему. < /p>
Вот код, в котором он не сбои: < /p>

Код: Выделить всё

    int32_t array[9] = {1, 4, 7, 2, 5, 8, 3, 6, 9};
uint16_t validRows = 3, validCols = 3;
MyConverter converter(array, 9, 3, 3, &validRows, &validCols);

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>
class MyConverter
{
public:
MyConverter(int32_t *const pArray,
const size_t &arraySize,
const size_t &maxMatrixRows,
const size_t &maxMatrixCols,
uint16_t *const pValidMatrixRows,
uint16_t *const pValidMatrixCols);

private:
int32_t * m_pArray;
const size_t m_ArraySize;
const size_t m_maxMatrixRows
const size_t m_maxMatrixCols
uint16_t * m_pValidMatrixRows
uint16_t * m_pValidMatrixCols
};

MyConverter::MyConverter(int32_t *const pArray,
const size_t &arraySize,
const size_t &maxMatrixRows,
const size_t &maxMatrixCols,
uint16_t *const pValidMatrixRows,
uint16_t *const pValidMatrixCols) :
m_pArray(pArray),
m_ArraySize(arraySize),
m_maxMatrixRows(maxMatrixRows),
m_maxMatrixCols(maxMatrixCols),
m_pValidMatrixRows(pValidMatrixRows),
m_pValidMatrixCols(pValidMatrixCols) {}

bool MyConverter::toJson(buffer)
{
Json::Value root;

root["rows"] = *m_pValidMatrixRows;
root["cols"] = *m_pValidMatrixCols;

for (uint16_t row = 0; row < *m_pValidMatrixRows; ++row)
{
for (uint16_t col = 0; col < *m_pValidMatrixCols; ++col)
{
root["matrix"][row][col] = m_pArray[row + (col * m_maxMatrixRows)];
}
}

Json::StreamWriterBuilder builder;
buffer = Json::writeString(builder, root);

return true;
}
< /code>
Output:
Value of: Json::parseFromStream(builder, istream, &actualRoot, &errs)
Actual: false
Expected: true

free(): double free detected in tcache 2
< /code>
Before I was using Json::Reader
, который устарел, и я также получил бесплатное (): двойное бесплатное обнаружение в TCACHE 2 время от времени, но утверждение никогда не было подтверждено, когда он разбился раньше ... при добавлении печати непосредственно после утверждения , это никогда не печатается, когда тестовые сбоя. Что меня действительно сбивает с толку, когда я печатаю значение буфера, я всегда получаю {"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
Ответить

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

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

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

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

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