Вот код, в котором он не сбои: < /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);
bool toJson(std::string buffer);
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(std::string 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::ReaderGoogletest не установлен, исходный код интегрирован с Cmake.
Подробнее здесь: https://stackoverflow.com/questions/794 ... om-jsoncpp