Как буферизовать вектор структуры массивов с помощью boost? - PullRequest
1 голос
/ 19 сентября 2019

У меня есть структура, которая выглядит следующим образом:

typedef struct{
   float test_var[2]; 
}test;

Остальная часть кода:

std::vector<test> test_vector;
std::vector<float> float_vector;

Функция буфера повышения используется для сериализации этих векторов и отправки клиенту Python.

std::array<boost::asio::const_buffer, 2u> seq = {
        boost::asio::buffer(test_vector),
        boost::asio::buffer(float_vector)}

После сериализации необходимо рассчитать начальный адрес памяти, откуда начинается float_vector данные.Я использую:

auto start = _data + (sizeof(test) * test_vector.size());

_data - начальный адрес буферизованной памяти.Но я получаю следующую ошибку в python:

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

Точно такой же код хорошо работает при изменении структуры на:

typedef struct{
   float test_var; 
}test;

Проблема в векторе буферизации структуры массива?или с вычислением начала?

Дополнительная информация: После буферизации данные отправляются в модуль C ++ API, где сериализованные данные преобразуются в тип списка Python и связываются с API Python.Пока для преобразования float_vector в список определен только API, поэтому вычисляется start.Это работает, как уже упоминалось, когда структура не имеет массива.

.def("get_float_vector", &GetPyList<csd::testClass>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...