首先,问题是程序因双倍内存释放而失败......
交易是:我有
FooCPlusPlus *obj;
我将它传递给我的脚本。它工作正常。像这样:
PyObject *pArgs, *pValue;
pArgs = Py_BuildValue("((O))", obj);
pValue = PyObject_CallObject(pFunc, pArgs);
其中 pFunc 是一个 python 函数......所以,我的脚本有函数,我使用 obj。
def main(args)
...
pythonObj = FooPython(args[0])
...
# hardcore calculation of "x"
...
...
pythonObj.doWork(x)
当然我已经定义了python类
class FooPython:
def __init__(self, data):
self._base = data
def doWork(arg):
import extend_module
extend_module.bar(self._base, arg)
“Extend_module”是一个扩展 C++ 模块,我在其中定义了函数“bar”。
我希望“bar”功能可以正常工作,但我却得到了内存错误:“双内存释放或损坏”。
这是“酒吧”功能:
static PyObject* bar(PyObject *self, PyObject *args)
{
PyObject *pyFooObject = 0;
int arg;
int ok = PyArg_ParseTuple(args,"Oi",&pyRuleHandler, &arg);
if(!ok) return 0;
void * temp = PyCObject_AsVoidPtr(pyFooObject);
FooCPlusPlus* obj = static_cast<FooCPlusPlus*>(temp);
obj->method(arg); // some c++ method
return PyCObject_FromVoidPtr((void *) ruleHandler, NULL);
}
它在“bar”的返回语句中失败......