Archived
This forum has been archived. Please start a new discussion on GitHub.
IceStorm::TopicManagerPrx::checkedCast crash
rolandsun
beijing
in Help Center
Ice version (e.g., Ice 3.4.1)
Compiler version ( Visual Studio 2008 sp1)
Operating system (XP sp3)
call stack
It seem that in checkedCastImpl , T::ice_staticId() get an invalid string. finally memcpy failed due to src is NULL, then program crashed.
Compiler version ( Visual Studio 2008 sp1)
Operating system (XP sp3)
Ice::ObjectPrx objPrx=ic->propertyToProxy("TopicManager.Proxy");
IceStorm::TopicManagerPrx manager=IceStorm::TopicManagerPrx::checkedCast(objPrx);
if(!manager)
{
cerr<<":invalid proxy"<<endl;
return ;
}
call stack
msvcr90d.dll!memcpy(unsigned char * dst=0x00ed23c0, unsigned char * src=0x00000000, unsigned long count=31) Line 298 Asm
ice34d.dll!IceInternal::BasicStream::write(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & v=<Bad Ptr>, bool convert=false) Line 464 + 0x2c bytes C++
ice34d.dll!IceDelegateM::Ice::Object::ice_isA(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & __id=<Bad Ptr>, const std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > > * context=[...]()) Line 1457 C++
ice34d.dll!IceProxy::Ice::Object::ice_isA(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & typeId=<Bad Ptr>, const std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > > * context=[...]()) Line 134 + 0x28 bytes C++
ice34d.dll!IceProxy::Ice::Object::ice_isA(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & typeId=<Bad Ptr>) Line 178 C++
rtr.exe!IceInternal::checkedCastImpl<IceInternal::ProxyHandle<IceProxy::IceStorm::TopicManager> >(const IceInternal::ProxyHandle<IceProxy::Ice::Object> & b={...}, const std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > > * context=[...]()) Line 899 + 0x30 bytes C++
rtr.exe!IceInternal::checkedCastHelper<IceProxy::IceStorm::TopicManager,IceProxy::Ice::Object>(const IceInternal::ProxyHandle<IceProxy::Ice::Object> & b={...}, void * __formal=0x00000000, const std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > > * ctx=[...]()) Line 99 + 0x11 bytes C++
rtr.exe!IceInternal::ProxyHandle<IceProxy::IceStorm::TopicManager>::checkedCast<IceProxy::Ice::Object>(const IceInternal::ProxyHandle<IceProxy::Ice::Object> & r={...}) Line 276 + 0x15 bytes C++
> rtr.exe!initSub(IceInternal::Handle<Ice::Communicator> & ic={...}) Line 51 + 0xd bytes C++
rtr.exe!main(int argc=1, char * * argv=0x00ec66b0) Line 37 + 0xc bytes C++
rtr.exe!WinMain(HINSTANCE__ * instance=0x00400000, HINSTANCE__ * prevInstance=0x00000000, char * __formal=0x001520c9, int cmdShow=1) Line 131 + 0x12 bytes C++
rtr.exe!__tmainCRTStartup() Line 578 + 0x35 bytes C
rtr.exe!WinMainCRTStartup() Line 403 C
kernel32.dll!7c82f23b()
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
ice34.dll!0053006e()
ice34.dll!0053006e()
ice34.dll!0053006e()
ice34.dll!0053006e()
ice34.dll!0053006e()
It seem that in checkedCastImpl , T::ice_staticId() get an invalid string. finally memcpy failed due to src is NULL, then program crashed.
emplate<typename P> P
checkedCastImpl(const ::Ice::ObjectPrx& b, const ::Ice::Context* context)
{
P d = 0;
if(b.get())
{
typedef typename P::element_type T;
d = dynamic_cast<T*>(b.get());
if(!d && (context == 0 ?
b->ice_isA(T::ice_staticId()) :
b->ice_isA(T::ice_staticId(), *context)))
{
d = new T;
d->__copyFrom(b);
}
}
return d;
}
0
Comments
-
Hi
The stack trace mentions both the ice34.dll and ice34d.dll shared libraries. The most likely cause of this crash is a runtime library mix-up. See this FAQ for an explanation. You need to make sure to link with ice.lib if you compile a release version of your executable or with iced.lib if you compile a debug version.
Cheers,
Benoit.0 -
thanks, Benoit
you are right .
All the libs used should be either debug or release,even qt's lib .0