金慶的專欄
C++博客
::
首頁(yè)
::
新隨筆
::
聯(lián)系
::
聚合
::
管理
::
423 隨筆 :: 0 文章 :: 454 評(píng)論 :: 0 Trackbacks
公告
我的隨筆
我的評(píng)論
我參與的隨筆
留言簿
(12)
給我留言
查看公開(kāi)留言
查看私人留言
隨筆分類
(502)
1. C/C++(166)
(rss)
2. 網(wǎng)游開(kāi)發(fā)(108)
(rss)
3. Golang(20)
(rss)
4. Linux/Unix(30)
(rss)
5. 軟工與管理(44)
(rss)
6. Python(23)
(rss)
7. Erlang(18)
(rss)
8. Rust(16)
(rss)
9. 其它(77)
(rss)
隨筆檔案
(423)
2023年1月 (1)
2022年11月 (1)
2022年10月 (2)
2022年9月 (1)
2022年4月 (6)
2022年1月 (2)
2021年12月 (4)
2021年11月 (6)
2021年10月 (2)
2021年9月 (2)
2021年8月 (7)
2021年7月 (2)
2021年5月 (2)
2021年3月 (1)
2021年2月 (2)
2021年1月 (1)
2020年12月 (1)
2020年10月 (1)
2020年9月 (5)
2020年8月 (1)
2020年7月 (1)
2020年6月 (1)
2020年4月 (2)
2020年3月 (3)
2020年2月 (3)
2020年1月 (1)
2019年12月 (1)
2019年9月 (2)
2019年4月 (2)
2019年1月 (1)
2018年12月 (1)
2018年11月 (3)
2018年10月 (1)
2018年9月 (3)
2018年8月 (3)
2018年7月 (2)
2018年6月 (4)
2018年5月 (4)
2018年4月 (4)
2018年3月 (1)
2018年1月 (2)
2017年12月 (2)
2017年11月 (3)
2017年10月 (3)
2017年8月 (7)
2017年7月 (1)
2017年6月 (1)
2017年5月 (3)
2017年4月 (3)
2017年3月 (3)
2017年2月 (2)
2017年1月 (2)
2016年12月 (5)
2016年11月 (2)
2016年10月 (2)
2016年9月 (1)
2016年8月 (6)
2016年7月 (3)
2016年6月 (2)
2016年5月 (4)
2016年4月 (2)
2016年3月 (2)
2016年1月 (3)
2015年12月 (2)
2015年11月 (2)
2015年10月 (1)
2015年8月 (2)
2015年7月 (1)
2015年6月 (1)
2015年5月 (4)
2015年4月 (3)
2015年3月 (4)
2015年2月 (5)
2015年1月 (4)
2014年12月 (3)
2014年11月 (3)
2014年10月 (2)
2014年9月 (3)
2014年8月 (1)
2014年4月 (4)
2014年3月 (1)
2014年2月 (4)
2014年1月 (5)
2013年12月 (5)
2013年11月 (5)
2013年9月 (2)
2013年8月 (2)
2013年7月 (2)
2013年6月 (2)
2013年5月 (1)
2013年1月 (2)
2012年12月 (1)
2012年11月 (1)
2012年9月 (1)
2012年8月 (3)
2012年7月 (2)
2012年6月 (1)
2012年4月 (3)
2012年3月 (2)
2012年2月 (3)
2012年1月 (2)
2011年11月 (2)
2011年10月 (3)
2011年9月 (2)
2011年8月 (2)
2011年7月 (3)
2011年6月 (2)
2011年5月 (3)
2011年1月 (2)
2010年12月 (1)
2010年11月 (2)
2010年10月 (2)
2010年9月 (3)
2010年8月 (2)
2010年7月 (3)
2010年6月 (1)
2010年5月 (3)
2010年4月 (3)
2010年3月 (5)
2010年2月 (4)
2010年1月 (4)
2009年12月 (2)
2009年11月 (3)
2009年10月 (4)
2009年9月 (3)
2009年8月 (2)
2009年7月 (4)
2009年6月 (1)
2009年5月 (3)
2009年4月 (4)
2009年3月 (2)
2009年2月 (5)
2009年1月 (1)
2008年12月 (7)
2008年11月 (4)
2008年10月 (1)
2008年9月 (3)
2008年8月 (4)
2008年7月 (3)
2008年6月 (4)
2008年5月 (6)
2008年4月 (7)
2008年3月 (6)
2008年1月 (5)
2007年12月 (7)
2007年11月 (4)
2007年10月 (5)
2007年9月 (6)
2007年8月 (8)
2007年7月 (5)
相冊(cè)
公告照片
搜索
積分與排名
積分 - 653959
排名 - 25
最新評(píng)論
1.?re: boost::asio::spawn 將一統(tǒng)C++網(wǎng)絡(luò)庫(kù)
asio 成為C++首選網(wǎng)絡(luò)庫(kù)
--linda
2.?re: log4cxx中文輸出錯(cuò)誤補(bǔ)丁
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--金慶
3.?re: mingw編譯OrzNet
能發(fā)送一個(gè)mingw編譯好的OrzNet庫(kù)給我嗎? liuweiqcxy@163.com
謝謝!
--劉威
4.?re: log4cxx中文輸出錯(cuò)誤補(bǔ)丁
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--bigbad
5.?re: log4cxx中文輸出錯(cuò)誤補(bǔ)丁
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--bigbad
閱讀排行榜
1.?"multiple definition of" 錯(cuò)誤(11016)
2.?SVN中邪惡的replace(10938)
3.?VS2005編譯libevent(10404)
4.?混音算法的學(xué)習(xí)與研究(10183)
5.?C調(diào)用lua腳本的效率測(cè)試(9003)
評(píng)論排行榜
1.?VC6正在被拋棄(35)
2.?VS2005編譯libevent(21)
3.?"multiple definition of" 錯(cuò)誤(18)
4.?C++引用優(yōu)于指針(17)
5.?ACE與ASIO之間關(guān)于Socket編程的比較(16)
behaviac動(dòng)態(tài)庫(kù)運(yùn)行出錯(cuò)
behaviac動(dòng)態(tài)庫(kù)運(yùn)行出錯(cuò)
(金慶的專欄 2017.3.16)
游戲是靜態(tài)鏈接的運(yùn)行庫(kù),添加behaviac動(dòng)態(tài)庫(kù)后,運(yùn)行出錯(cuò):
> ucrtbased.dll!free_dbg_nolock(void * const block, const int block_use) 行 996 C++
ucrtbased.dll!_free_dbg(void * block, int block_use) 行 1030 C++
libbehaviac_msvc_debug.dll!operator delete(void * block) 行 17 C++
libbehaviac_msvc_debug.dll!std::_Deallocate(void * _Ptr, unsigned int _Count, unsigned int _Sz) 行 132 C++
libbehaviac_msvc_debug.dll!std::allocator<std::_Container_proxy>::deallocate(std::_Container_proxy * _Ptr, unsigned int _Count) 行 720 C++
libbehaviac_msvc_debug.dll!std::_Wrap_alloc<std::allocator<std::_Container_proxy> >::deallocate(std::_Container_proxy * _Ptr, unsigned int _Count) 行 988 C++
libbehaviac_msvc_debug.dll!std::_String_alloc<std::_String_base_types<char,std::allocator<char> > >::_Free_proxy() 行 661 C++
libbehaviac_msvc_debug.dll!std::_String_alloc<std::_String_base_types<char,std::allocator<char> > >::~_String_alloc<std::_String_base_types<char,std::allocator<char> > >() 行 629 C++
libbehaviac_msvc_debug.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> >() 行 1018 C++
libbehaviac_msvc_debug.dll!behaviac::CTagObject::Save(behaviac::IIONode * node, const char * szClassName) 行 100 C++
libbehaviac_msvc_debug.dll!behaviac::Agent::InitVariableRegistry() 行 476 C++
libbehaviac_msvc_debug.dll!behaviac::Agent::Init_(int contextId, behaviac::Agent * pAgent, short priority, const char * agentInstanceName) 行 227 C++
giant_test_client.exe!behaviac::Agent::InitAgent(behaviac::Agent * pAgent, const char * agentInstanceName, const char * agentInstanceNameAny, bool bToBind, int contextId, short priority) 行 56 C++
giant_test_client.exe!behaviac::Agent::Create<PlaneAgent>(const char * agentInstanceName, int contextId, short priority) 行 88 C++
giant_test_client.exe!Client::InitPlayer() 行 36 C++
giant_test_client.exe!Client::Client() 行 23 C++
giant_test_client.exe!main() 行 50 C++
giant_test_client.exe!invoke_main() 行 64 C++
giant_test_client.exe!__scrt_common_main_seh() 行 253 C++
giant_test_client.exe!__scrt_common_main() 行 296 C++
giant_test_client.exe!mainCRTStartup() 行 17 C++
kernel32.dll!@BaseThreadInitThunk@12() 未知
ntdll.dll!___RtlUserThreadStart@8() 未知
ntdll.dll!__RtlUserThreadStart@8() 未知
看來(lái)是string跨越動(dòng)態(tài)庫(kù)析構(gòu)。
如果string在動(dòng)態(tài)庫(kù)中構(gòu)造又析構(gòu),動(dòng)態(tài)庫(kù)的運(yùn)行時(shí)庫(kù)可以與主程序不同。
但如果用主程序的運(yùn)行時(shí)申請(qǐng)內(nèi)存,在動(dòng)態(tài)庫(kù)中用另一個(gè)運(yùn)行時(shí)庫(kù)釋放,就會(huì)產(chǎn)生上面的錯(cuò)誤。
可以建立一個(gè)最小化的程序來(lái)復(fù)現(xiàn)上面的錯(cuò)誤。
新建一個(gè)行為樹(shù),為Agent創(chuàng)建一個(gè)屬性。
然后主程序運(yùn)行庫(kù)設(shè)為:多線程調(diào)試 (/MTd),而不是:多線程調(diào)試 DLL (/MDd)。
調(diào)試運(yùn)行創(chuàng)建Agent時(shí)就會(huì)出上面錯(cuò)誤。
疑問(wèn)是這是動(dòng)態(tài)庫(kù)內(nèi)部調(diào)用,怎么會(huì)產(chǎn)生跨庫(kù)析構(gòu)呢?
斷點(diǎn)進(jìn)入string的構(gòu)造過(guò)程可以發(fā)現(xiàn),string不是動(dòng)態(tài)庫(kù)構(gòu)造的,而是主程序構(gòu)造的:
> test_client.exe!behaviac::StringUtils::internal::ToString(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & val) 行 138 C++
test_client.exe!behaviac::StringUtils::Detail::ToStringPtrHanler<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,0>::ToString(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & v) 行 192 C++
test_client.exe!behaviac::StringUtils::Detail::ToStringEnumHanler<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,0>::ToString(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & v) 行 228 C++
test_client.exe!behaviac::StringUtils::Detail::ToStringStructHanler<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,0>::ToString(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & val) 行 242 C++
test_client.exe!behaviac::StringUtils::ToString<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & val) 行 256 C++
test_client.exe!behaviac::SetFromString_t<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,0>::Get(std::basic_string<char,std::char_traits<char>,std::allocator<char> > & value) 行 790 C++
test_client.exe!behaviac::CProperty<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >::GetValueToString(const behaviac::Agent * self) 行 848 C++
libbehaviac_msvc_debug.dll!behaviac::CTagObject::Save(behaviac::IIONode * node, const char * szClassName) 行 97 C++
libbehaviac_msvc_debug.dll!behaviac::Agent::InitVariableRegistry() 行 476 C++
libbehaviac_msvc_debug.dll!behaviac::Agent::Init_(int contextId, behaviac::Agent * pAgent, short priority, const char * agentInstanceName) 行 227 C++
test_client.exe!behaviac::Agent::InitAgent(behaviac::Agent * pAgent, const char * agentInstanceName, const char * agentInstanceNameAny, bool bToBind, int contextId, short priority) 行 56 C++
test_client.exe!behaviac::Agent::Create<PlaneAgent>(const char * agentInstanceName, int contextId, short priority) 行 88 C++
test_client.exe!Client::InitPlayer() 行 36 C++
test_client.exe!Client::Client() 行 23 C++
test_client.exe!main() 行 50 C++
test_client.exe!invoke_main() 行 64 C++
test_client.exe!__scrt_common_main_seh() 行 253 C++
test_client.exe!__scrt_common_main() 行 296 C++
test_client.exe!mainCRTStartup() 行 17 C++
kernel32.dll!75c3336a() 未知
[下面的框架可能不正確和/或缺失,沒(méi)有為 kernel32.dll 加載符號(hào)]
ntdll.dll!76fa9902() 未知
ntdll.dll!76fa98d5() 未知
原因?yàn)?IProperty::GetValueToString()是虛函數(shù),實(shí)際實(shí)現(xiàn)是由主程序?qū)崿F(xiàn)模板類。
behaviac::CProperty<>::GetValueToString()
解決方案為使用behaviac靜態(tài)庫(kù)并且靜態(tài)鏈接運(yùn)行時(shí)庫(kù)。
posted on 2017-03-16 11:40
金慶
閱讀(742)
評(píng)論(0)
編輯
收藏
引用
所屬分類:
1. C/C++
、
2. 網(wǎng)游開(kāi)發(fā)
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
【推薦】100%開(kāi)源!大型工業(yè)跨平臺(tái)軟件C++源碼提供,建模,組態(tài)!
相關(guān)文章:
How are dtLinks created in NavMesh
C++ parameter passing rules
Naming Conventions for Accessors
Visual Studio 2019 Compiler Hangs
Fbx File Format Identifier
查找內(nèi)存錯(cuò)誤
std::thread 中的異常會(huì)丟失調(diào)用棧
用賦值代替 protobuf CopyFrom()
vs2017 linux 編譯輸出改成 vs 格式
為 LiteIDE 添加選中標(biāo)記
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問(wèn)
Chat2DB
管理
Powered by:
C++博客
Copyright © 金慶
久久久www免费人成精品
|
精品久久人人爽天天玩人人妻
|
精品久久久久久久久中文字幕
|
精品久久久一二三区
|
国产精品成人99久久久久91gav
|
亚洲日韩中文无码久久
|
久久久青草青青国产亚洲免观
|
91久久精品视频
|
国产AⅤ精品一区二区三区久久
|
久久国产高清字幕中文
|
久久精品人人做人人妻人人玩
|
久久久老熟女一区二区三区
|
国内精品伊人久久久久av一坑
|
国产精品久久久久国产A级
|
久久人人爽人人爽人人片av高请
|
91麻豆国产精品91久久久
|
久久福利资源国产精品999
|
久久99精品国产麻豆宅宅
|
久久综合给合久久国产免费
|
91久久精一区二区三区大全
|
亚洲伊人久久大香线蕉苏妲己
|
国产精品内射久久久久欢欢
|
久久精品国产亚洲Aⅴ蜜臀色欲
|
无码任你躁久久久久久老妇
|
18禁黄久久久AAA片
|
99久久99这里只有免费费精品
|
色综合合久久天天综合绕视看
|
久久亚洲精品视频
|
久久久久这里只有精品
|
国内精品久久久久影院薰衣草
|
国产精品久久久久久久久鸭
|
精品久久久无码中文字幕
|
99久久夜色精品国产网站
|
国产精品久久久久久久久免费
|
日日狠狠久久偷偷色综合96蜜桃
|
中文字幕久久精品无码
|
国产高潮久久免费观看
|
香蕉久久夜色精品国产尤物
|
99久久久国产精品免费无卡顿
|
久久青青草原精品国产不卡
|
国产麻豆精品久久一二三
|