У меня есть структура, которая выглядит следующим образом:
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>)