经过std:矢量自C++通过Python到Python:获取无意义的值

2024-04-30 06:47:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我本来想跟着procedure来的,但我被卡住了。我试图从我的C++代码中传递一个^ {CD1}}(包在{{CD2}})到Python。这就是我所拥有的:

extern 'C' {
    double* returnQ() {
        std::vector<double> v = {7.5, 5.5, 16.5, 8.5};
        std::cout<<"Print first element:"<<vec[0]<<std::endl;
        return v.data(); }
}

这是我的python代码。通过ctypes作为lib加载库后,我有:

^{pr2}$

然而,当我在Python中调用q()时,我得到一个随机数数组。我不知道为什么?在


Tags: 代码externelementfirststddoubleprintvector
1条回答
网友
1楼 · 发布于 2024-04-30 06:47:07

如注释中所述,向量是一个局部变量,在函数返回后被销毁。一种有效的方法是让Python管理内存并将数据复制到内存中。在

测试.cpp

#include <vector>
#include <cstring>

#define API __declspec(dllexport) // Windows-specific export

// Must pass double[4] array...
extern "C" API void returnQ(double* data) {
    std::vector<double> v = {7.5, 5.5, 16.5, 8.5};
    // Of course, you could write directly to "data" without the vector...
    std::memcpy(data,v.data(),v.size() * sizeof v[0]);
}

用法:

^{pr2}$

相关问题 更多 >