当将c ++函数暴露给python时,boost :: python返回的对象数组会给出分段错误

时间:2018-08-17 03:15:09

标签: python c++ boost boost-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;
   }
}

这是我的 BOOST_PYTHON_MODULE

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");

这将创建mylib.so共享库。然后我在python中使用了它。如下。

run.py

import mylib

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

但是在编译和运行时,此代码给我一个错误,分段错误(内核已转储)

0 个答案:

没有答案