Я пытаюсь оптимизировать код python, вызывая функцию C ++, которая использует eigen. Я использую для этого ctypes. Мой массив numpy передается как float * (на основе этого примера: https://github.com/nicolamontecchio/ctypes-eigen-numpy) Это работает для входных массивов, но у меня проблемы с результатом.
В основном это выглядит так:
void some_function(..., int32_t** results) {
for (int32_t i = 0; ...) {
Eigen::Map<Eigen::RowVectorXi> eigen_result(results[i], 1, size));
eigen_result = Eigen::RowVectorXi::Zero(size);
}
}
Это работает, поскольку я могу распечатать результат функции в python. Однако в конце функции я получаю следующую ошибку:
double free or corruption (!prev)
Эта ошибка не возникает при выполнении, например,
eigen_result(0) = 5.0;
Таким образом, кажется, что назначение не на самом деле не заполняю данными мой указатель данных. Может ли кто-нибудь объяснить мне, как должно происходить это назначение, чтобы данные фактически заполнялись моим указателем без выделения нового указателя, который освобождается дважды?
Спасибо