0

首先,问题是程序因双倍内存释放而失败......

交易是:我有

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”的返回语句中失败......

4

1 回答 1

0

好吧,我终于知道问题出在哪里了:

我们应该从“bar”函数输入参数返回:

return args;

代替

return PyCObject_FromVoidPtr((void *) ruleHandler, NULL);
于 2009-09-28T16:30:23.627 回答