Собственная карта python памяти - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь оптимизировать код 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;

Таким образом, кажется, что назначение не на самом деле не заполняю данными мой указатель данных. Может ли кто-нибудь объяснить мне, как должно происходить это назначение, чтобы данные фактически заполнялись моим указателем без выделения нового указателя, который освобождается дважды?

Спасибо

1 Ответ

0 голосов
/ 03 августа 2020

Оказывается, я просчитал переменную size. Это имеет смысл, это вызывает проблемы с памятью ...

Eigen Map работает должным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...