【发布时间】:2017-09-04 11:27:01
【问题描述】:
我是 C++ 新手,如有任何“愚蠢”的错误,我深表歉意。
我在 C++ 中创建了一个共享对象,用于 Python。但是,当我尝试在 Python 中调用此函数时,内核崩溃了。
C++文件如下:
#include <cmath>
#include <iostream>
#include <list>
#include <vector>
using namespace std;
extern "C"
{
vector<int> cplusplus(int n=3,int maximum=1000)
{
int i,j,order,m,i1,i2,mag;
vector<int> output(0);
i=1;
j=0;
while (i/maximum<=1)
{
i=10*i;
j=j+1;
}
m=j-1;
for (i1=1; i1<m+2; i1++)
{
mag=pow(10,(i1-1));
i=0;
while (i+mag*(n+1)<=maximum)
{
for (i2=i+mag*n; i2<i+mag*(n+1); i2++)
{
output.push_back(i2-1);
}
i=i+10*mag;
}
if(i+mag*(n+1)>maximum)
{
for (i2=i+mag*n; i2<maximum+1; i2++)
{
output.push_back(i2-1);
}
}
}
return output;
}
}
我使用以下方法创建 .so 文件:
g++ -shared -o cplusplus.so cplusplus.cpp
我使用 Python 调用 C++ 函数:
import ctypes
cpp=ctypes.cdll.LoadLibrary('/Users/.../cplusplus.so')
print cpp.cplusplus(n=3,maximum=1000)
该函数在正确返回时应返回一个包含 1 到 1000 之间的所有数字的向量,其中包含一个 3(即 3、13、23、30、31、...)。然而,目前 Python 内核崩溃了。
我想这与我使用向量或 C++ 文件中的内存泄漏有关。
提前感谢您的帮助!
【问题讨论】:
-
这是
ctypes而不是cpptypes。ctypes无法处理vector<int>。您必须具有 C 数据类型。