|
Boost : |
From: Ashok Thirumurthi (athirumurthi.news_at_[hidden])
Date: 2005-10-14 09:13:36
Dear Boost,
The following call stack leads to an access violation when I link a VC 7.1 DLL to the release build of the boost signals 1_33_0 DLL. In comparison, there is no access violation when I link to the debug build of the same library. Similarly, when I add the signals source to my own release DLL, there is no access violation. I attempted to disable all compiler optimizations in msvc.jam as follows. However, after running bjam -a in signals\build and installing the output, the AV still occurs.
# 8.0 deprecates some of the options
if ! [ MATCH ^([67].*) : $(version) ]
{
# flags msvc.compile CFLAGS $(condition)/<optimization>speed : /O2 ;
# flags msvc.compile CFLAGS $(condition)/<optimization>space : /O1 ;
flags msvc.link.dll MANIFEST : "mt -manifest " ;
flags msvc.link.dll OUTPUTRESOURCE : "-outputresource:" ;
}
else
{
# flags msvc.compile CFLAGS $(condition)/<optimization>speed : /Ogity /O2 /Gs ;
# flags msvc.compile CFLAGS $(condition)/<optimization>space : /Ogisy /O1 /Gs ;
}
Note that I have a default installation of Visual Studio 2003. How can I alter the release build to avoid the access violation? More information:
Access violation reading location 0x00000004
(*((k2).content)).__vfptr is 0x00000000
bool operator()(const any& k1, const any& k2) const
{
if (k1.type() == typeid(front_type))
return !(k2.type() == typeid(front_type));
if (k1.type() == typeid(back_type))
return false;
> if (k2.type() == typeid(front_type))
return false;
if (k2.type() == typeid(back_type))
return true;
> Colorado.dll!boost::signals::detail::any_bridge_compare<std::less<int>,int>::operator()(const boost::any & k1={...}, const boost::any & k2={...}) Line 54 + 0xc C++
Colorado.dll!boost::detail::function::function_obj_invoker2<boost::signals::detail::any_bridge_compare<std::less<int>,int>,bool,boost::any,boost::any>::invoke(boost::detail::function::any_pointer function_obj_ptr={...}, boost::any a0={...}, boost::any a1={...}) Line 119 + 0x1b C++
boost_signals-vc71-mt-1_33.dll!010a2340()
boost_signals-vc71-mt-1_33.dll!010a2c6a()
boost_signals-vc71-mt-1_33.dll!010a42be()
boost_signals-vc71-mt-1_33.dll!010a4bd0()
boost_signals-vc71-mt-1_33.dll!010a4dfc()
boost_signals-vc71-mt-1_33.dll!010a5933()
Colorado.dll!boost::signal0<bool,boost::last_value<bool>,int,std::less<int>,boost::function<bool __stdcall(void),std::allocator<void> > >::signal0<bool,boost::last_value<bool>,int,std::less<int>,boost::function<bool __stdcall(void),std::allocator<void> > >(const boost::last_value<bool> & c={...}, const std::less<int> & comp={...}) Line 198 + 0x85 C++
...
Do these observations suggest how I might successfully handle this callback from the release boost DLL? Thanks in advance,
- Ashok Thirumurthi
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk