[C++-sig] Re: Cannot believe what my eyes see: ACCES VIOLATION...
David Abrahams
dave at boost-consulting.com
Mon Sep 15 17:11:08 CEST 2003
yakumoklesk at yahoo.es writes:
> This is the program that causes the acces violation. Can't be more simple...
Sure it can ;->
> #include <python.h>
^^^^^^^^^^^^^^^^^^^
Don't do this. You should just include a Boost.Python header to get
python.h. When I get rid of that, the only crash I can reproduce
goes away. This is due to the debug-mode handling provided by
wrap_python.hpp as described in
http://www.boost.org/libs/python/doc/building.html#variants
> #include <boost/python.hpp>
>
> namespace python = boost::python;
>
> void func()
> {
> python::handle<> main_module( python::borrowed( PyImport_AddModule(
> "__main__" ) ) );
> //python::handle<> main_namespace( python::borrowed( PyModule_GetDict(
> main_module.get() ) ) );
> PyRun_SimpleString("a = 3");
>
> python::handle<> hmain_namespace( python::borrowed(
> PyModule_GetDict(main_module.get() ) ) );
> python::dict main_namespace( hmain_namespace );
> }
namespace py = boost::python;
void func()
{
py::object main_module
= py::extract<py::object>(PyImport_AddModule("__main__"));
PyRun_SimpleString("a = 3");
py::dict main_namespace(main_module.attr("__dict__"));
}
> The acces violation occurs in the last line of the func() code:
>
> python::dict main_namespace( hmain_namespace );
>
> I have been trying to debug what happens. This is what I have
> got. Don't know if it will be useful:
>
> In the template function
>
> template <class T>
> explicit dict(T const& data)
> : base(object(data))
> {
> }
>
> data, in this case, the handle<> named main_namespace, holds the following
> information
>
> - data {...}
> - m_p 0x00ae33b0
> + _ob_next 0x00ae3338
> + _ob_prev 0x00ae3478
> ob_refcnt 2
> + ob_type 0x00574038 _PyDict_Type
>
> inside the function object
>
> object::object(handle<> const& x)
> : object_base(python::incref(python::expect_non_null(x.get())))
> {}
>
> x should have the same information as data had before, because is the same handle<>,
> but I find the following:
>
> - x {...}
> - m_p 0x00ae33b0
> ob_refcnt 11416376
> + ob_type 0x00ae3478
>
> It seems that the PyObject structure pointed by m_p has... dynamically changed? Well,
> sorry if I am sayin nonsenses, but I don't know what to do. Maybe it would be better for
> me to use objects and only use handles, but then there is no sense in using boost,
> because I could only get the advantage PyObject handling.
>
> More details of my project:
>
> It is a windows 32 console application, made in Visual C++ 6.0
> I am using the directives _DEBUG, and the boost_python_debug.lib library that this
> morning compiled using bjam and the source code that checked out from boost-
> consulting.com yesterday at night.
> The version of the puthon libraries is 2.2.3, but it fails also with 2.2.1.
>
> The include path of the proyect is:
>
> E:\proxp\prog\DirectX 9.0 SDK\Lib
> E:\PROXP\PROG\DIRECTX 8.1 SDK VC++\INCLUDE
> e:\proxp\prog\VC++ 6.0\INCLUDE
> e:\proxp\prog\VC++ 6.0\ATL\INCLUDE
> e:\proxp\prog\VC++ 6.0\MFC\INCLUDE
> E:\PROXP\PROG\PYTHON 2.2.1\INCLUDE (when i tried with 2.2.3 i changed it to 2.2.3
> of course)
> E:\proxp\prog\boost checkout-14-09-2003 boost-consulting.com
>
> The library path of the proyect is:
>
> E:\proxp\prog\DirectX 9.0 SDK\Lib
> E:\PROXP\PROG\DIRECTX 8.1 SDK VC++\LIB
> e:\proxp\prog\VC++ 6.0\LIB
> e:\proxp\prog\VC++ 6.0\MFC\LIB
> E:\proxp\prog\Python 2.2.1 source\PCbuild (because I use python_d.dll for debug
> version. As above, i change to 2.2.3 when i using 2.2.3 includes)
> E:\proxp\prog\boost checkout-14-09-2003 boost-consulting.com\libs\python\build\bin-
> stage ( I have also tried E:\proxp\prog\boost checkout-14-09-2003 boost-
> consulting.com\libs\python\build\bin\boost_python.dll\msvc\debug\runtime-link-dynamic
> with the same ACCES VIOLATION result )
>
> I also have tried to compile the boost.python libraries using msvc with the project
> located in E:\proxp\prog\boost checkout-14-09-2003 boost-
> consulting.com\libs\python\build\VisualStudio
> but I get tons of erros from the
>
> e:\proxp\prog\VC++ 6.0\INCLUDE\mmreg.h file, saying things lik
>
> 'WORD' : missing storage-class or type specifiers
>
> and other types as well that VC does not find.
>
> This seems strange to me, that a file from VC++ include has this kind of errors.
>
> Any hint would be appreciate. If need more details, just ask me.
>
> David Lucena
--
Dave Abrahams
Boost Consulting
www.boost-consulting.com
More information about the Cplusplus-sig
mailing list