python向python公开c++函数时,返回对象数组会导致分段错误

2024-10-03 00:24:13 发布

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

我使用boost::python编写了一个接口。有两个类叫做AABB,BB有一个函数叫做get_AA,它是AA的返回对象数组。这是我写的代码。你知道吗

AA级

class AA{
    int height;

    //constructors
    AA(){}
    AA(map<string,string> data){}
}

BB级

class BB{
   //constructor
   BB(std::string url){}

   //method
   AA * get_AA(){
      AA * blockRangeArray = new AA[SIZE];

      //getting data from SQL-Lite
      std::vector <std::map<string,string>>  rangeData;
      rangeData = xx.data();   //this works fine 

      for(int x = 0; x <= SIZE; x++){
            std::map<string,string> slaveBlkMap;
            slaveBlkMap = rangeData[x];

            Block *blk = new Block(slaveBlkMap);     
            blockRangeArray[x] = *blk;
      }

      return blockRangeArray;
   }
}

这是我的增强PYTHON模块

BOOST_PYTHON_MODULE(mylib){
   using namespace boost::python;

   class_<BB>("BB", init<std::string>())
   .def("get_AA", &BB::get_AA, boost::python::return_value_policy<boost::python::manage_new_object>());

   class_< AA >("AA");

这就产生了迈利布·索共享库。然后我在python中使用了它。像下面这样。你知道吗

运行.py

import mylib

data1 = mylib.BB("dfsfs");
AA_class_object_Array = data1.get_AA()  #expecting array of AA objects

但是在编译和运行时,这段代码给了我一个错误分段错误(core dumped)。你知道吗


Tags: 代码mapnewdatagetstringclassaa