首页 > 解决方案 > python内存的特征图

问题描述

我试图通过调用使用特征的 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;

因此,该分配似乎并没有真正将数据填充到我的数据指针中。有人可以向我解释这个分配应该如何发生,以便数据实际上填充到我的指针中而不分配一些被释放两次的新指针?

谢谢

标签: pythonctypeseigen

解决方案


原来我计算错了size变量。这是有道理的,这会导致内存问题......

特征图按预期工作。


推荐阅读