[C++-sig] boost::python::make_tuple crashing

Simon Pickles sipickles at googlemail.com
Sun Jul 5 17:55:33 CEST 2009


Hi,

I can't figure why the test program is crashing. I am comparing speeds 
of boost::python::tuple and boost::any as variable length application 
message wrappers.
////////////////////////////////////////////////
#include "boost//any.hpp"
#include "boost//python.hpp"
#include <string>
#include <vector>
// RakNet::GetTime for accurate millisecond timimg
#include "GetTime.h"
#include <stdio.h>
#include <iostream>
using namespace std;

void HandleBoostAny( const vector<boost::any>& ba)
{
    const string s = boost::any_cast<string>(ba[0]);
    const float f = boost::any_cast<float>(ba[1]);
    const int ui = boost::any_cast<int>(ba[2]);
}
void HandleBoostPythonTuple( const boost::python::tuple& b)
{
    const string s = boost::python::extract<std::string>(b[0]);
    const float f = boost::python::extract<float>(b[0]);
    const int ui = boost::python::extract<int>(b[2]);
}
int _tmain(int argc, _TCHAR* argv[])
{
    int count = 0;
    int target = 100000;
    string s = "spam";
    unsigned char i = 42;
    float f = 3.14f;

    //cout << "Starting boost.any test" << endl;
    //RakNetTime baStart = RakNet::GetTime();
    //for ( count = 0; count < target; ++count )
    //{
    //    vector<boost::any> ba;
    //    ba.push_back(boost::any(s));
    //    ba.push_back(boost::any(f));
    //    ba.push_back(boost::any(i));
    //    HandleBoostAny(ba);
    //}
    //RakNetTime baEnd = RakNet::GetTime();
    //cout << "Duration: " << (baEnd - baStart) << endl;
    ////////////////////////
    cout << "Starting boost.python.tuple test" << endl;
    RakNetTime bptStart = RakNet::GetTime();
    for ( count = 0; count < target; ++count )
    {
        boost::python::tuple bpt = boost::python::make_tuple(s,f);

        HandleBoostPythonTuple(boost::python::make_tuple(f));
    }
    RakNetTime bptEnd = RakNet::GetTime();
    cout << "Duration: " << (bptEnd - bptStart) << endl;
    return 0;
}
////////////////////////////////////////////////////

I am getting an access violation here, on WinXP SP3, boost 1.38:

     python25.dll!1e07de69()    
     [Frames below may be incorrect and/or missing, no symbols loaded 
for python25.dll]   
 >    
speedTest.exe!boost::python::converter::arg_to_python<int>::arg_to_python<int>(const 
int & x=0)  Line 113 + 0x31 bytes    C++
     
speedTest.exe!boost::python::api::object_initializer_impl<0,0>::get<int>(const 
int & x=0, boost::mpl::bool_<0> __formal={...})  Line 374 + 0xf bytes    C++
     
speedTest.exe!boost::python::api::object_base_initializer<int>(const int 
& x=0)  Line 296 + 0x10 bytes    C++
     speedTest.exe!boost::python::api::object::object<int>(const int & 
x=0)  Line 316 + 0x2c bytes    C++
     
speedTest.exe!boost::python::api::object_operators<boost::python::api::object>::operator[]<int>(const 
int & key=0)  Line 53 + 0xf bytes    C++
     speedTest.exe!HandleBoostPythonTuple(const boost::python::tuple & 
b={...})  Line 21 + 0x27 bytes    C++
     speedTest.exe!main()  Line 59 + 0x35 bytes    C++
     speedTest.exe!__tmainCRTStartup()  Line 586 + 0x19 bytes    C
     speedTest.exe!mainCRTStartup()  Line 403    C
     kernel32.dll!7c817077()    

I can use make tuple in other programs, but cant see why not here.

Thanks for any advice

Simon


More information about the Cplusplus-sig mailing list