Hello,

sorry if this question is too trivial, but I've got some rather strange problem
with using the boost::python type wrapper for the python list.

It goes as follows: I've got a very small demo program (say main.cpp). 
Running it causes a segfault. (The actual project is much larger, of course.)

The system I use is a Linux OpenSuse 11.1, with the distribution package 
python-2.6.0-2.23.1 
installed. I manually installed boost 1.44 (because the newer versions didn't 
quite work with the 
boost-log package, which is needed for the actual project). Which other 
information might be helpful?

This is the program:

*******************************************
#include <iostream>
#include <boost/python.hpp>

using namespace std;

int main() {
    boost::python::list myList;
    myList.append("foo");
    myList.append("fork");
    cerr << "Printing length of list." << endl;
    cerr << "Length of myList: " << boost::python::len(myList) << endl; 
// the above line causes a segfault!
    cerr << "TheList: " << boost::python::extract<string>(myList[0])() << ","
                  << boost::python::extract<string>(myList[1])() << endl;
    cerr << "Finished" << endl;
}
*******************************************

which I compile by the two commands:

/usr/bin/c++    -O0 -Wall -g -I. -I/usr/include/python2.6 -I/usr/local/include  
 -o main.o -c main.cpp
/usr/bin/c++   -O0 -Wall -g   main.o  -o boost_list_test -rdynamic 
-L/usr/local/lib /usr/local/lib/libboost_python.so -lpython2.6 
-Wl,-rpath,/usr/local/lib

The segfault occurs at the call to boost::python::len(myList). I debugged 
the program with gdb, but the backtrace
#0  0xb7ec6027 in PyErr_Occurred () from /usr/lib/libpython2.6.so.1.0
#1  0x0804b0b1 in main () at main.cpp:15

doesn't really tell me anything. Interestingly, removing the offending line 
causes a segfault at the *next* line, with a more verbose backtrace:

#0  0xb7e529d7 in PyInt_FromLong () from /usr/lib/libpython2.6.so.1.0
#1  0x0804ba33 in arg_to_python (this=0xbfffee70, x=@0xbfffef48) at 
/usr/local/include/boost/python/converter/builtin_converters.hpp:122
#2  0x0804ba5d in boost::python::api::object_initializer_impl<false, 
false>::get<int> (x=@0xbfffef48) at 
/usr/local/include/boost/python/object_core.hpp:393
#3  0x0804ba9e in boost::python::api::object_base_initializer<int> 
(x=@0xbfffef48) at /usr/local/include/boost/python/object_core.hpp:315
#4  0x0804bab1 in object<int> (this=0xbfffeedc, x=@0xbfffef48) at 
/usr/local/include/boost/python/object_core.hpp:334
#5  0x0804bae1 in 
boost::python::api::object_operators<boost::python::api::object>::operator[]<int>
 (this=0xbfffef28, key=@0xbfffef48)
    at /usr/local/include/boost/python/object_items.hpp:61
#6  0x0804af46 in main () at main.cpp:17

I really don't understand what I'm doing wrong. Do I need to resize the list 
before using append? The documentation
(http://www.boost.org/doc/libs/1_44_0/libs/python/doc/v2/list.html) doesn't say 
anything about this.

Any tips or hints are greatly appreciated!

Thankyou,

- Michael Wand
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to