【发布时间】:2020-11-23 06:57:37
【问题描述】:
我正在尝试通过调用使用 eigen 的 C++ 函数来优化一些 python 代码。 我为此使用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;
所以看起来赋值并没有真正将数据填充到我的数据指针中。有人可以向我解释一下这个分配应该如何发生,以便数据实际上填充到我的指针中,而不分配一些被释放两次的新指针?
谢谢
【问题讨论】: