当前位置: 首页 > news >正文

广州网站站建设培训如何开发医院

广州网站站建设培训,如何开发医院,帝国cms企业网站,一般通过男网友最近写的模块#xff0c;在独立的应用程序中测试是没问题的#xff0c;但把它装配成DLL后#xff0c;再在另一个应用程序中调用时却出现了内存错误。程序的模块链接关系大概是这样的#xff1a; module就是我所写的模块#xff0c;在这里被封装为DLL#xff0c;因为要使用… 最近写的模块在独立的应用程序中测试是没问题的但把它装配成DLL后再在另一个应用程序中调用时却出现了内存错误。程序的模块链接关系大概是这样的 module就是我所写的模块在这里被封装为DLL因为要使用json相关的功能该DLL链接了一个静态库 (jsoncpp.lib)。最后在应用程序中导入并使用module.dll同时因为在应用程序中也需要用到json所以应用程序也链接了jsoncpp.lib。 以下用一些伪代码来描述这些模块间的调用关系以具现出这个错误。 jsoncpp.lib为c提供了功能齐全的json操作其核心的类是Json::Value。阅读本篇文章你无需了解太多json module.dll中导出了一个接口 //ModuleClass.h #include json/value.h#if defined MODULE_EXPORTS #define MODULE_EXPORTS __declspec(dllexport) #else #define MODULE_EXPORTS __declspec(dllimport) #endifclass ModuleClass { public:MODULE_EXPORTS void AllocSomeMemory( Json::Value root ){// 这将申请一些内存因为会new出一个Json::Value并append到root上root.append( testString );} }; 应用程序1#include json/value.h2#include ModuleClass.h3int main()4{5    Json::Value root;6    ModuleClass::AllocSomeMemory( root );7}在Debug模式下当main函数执行完毕对Json::Value root进行析构时程序便出现了异常。分析下很显然调用ModuleClass::MallocMemoryHere时申请的内存是在module.dll中申请的而对这些内存的析构则是在应用程序.exe中进行的析构root会同时析构append在root上的所有子Json::Value。不过这是异常的真正原因么追踪到异常的出错点dbgheap.c文件中那句ASSERT语句。1/*2* If this ASSERT fails, a bad pointer has been passed in. It may be3* totally bogus, or it may have been allocated from another heap.4* The pointer MUST come from the local heap.5*/6_ASSERTE(_CrtIsValidHeapPointer(pUserData));注释中的最后一句话”The pointer MUST come from the ‘local’ heap“引起了我的警惕难道对于内存的申请和释放不是在同一个heap上除了‘local’ heap还有一个什么heap么。去MSDN上搜索了关于_CrtIsValidHeapPointer似乎找到了答案以下这段话是MSDN上对于_CrtIsValidHeapPointer的介绍The _CrtIsValidHeapPointer function is used to ensure that a specific memory address is within the local heap. The local heap refers to the heap created and managed by a particular instance of the C run-time library. If a dynamic-link library (DLL) contains a static link to the run-time library, it has its own instance of the run-time heap, and therefore its own heap, independent of the application’s local heap. When _DEBUG is not defined, calls to _CrtIsValidHeapPointer are removed during preprocessing.注意字体加粗的部分这不正应对我的情形么错误不在于DLL中申请的内存在EXE中释放而在于如果这个DLL拥有一个静态链接它就会拥有独立的运行时堆独立于应用程序的堆。这样对于内存申请和释放并不是在同一个堆上进行的当然出错了。解决虽然MSDN上最后说如果把项目改成release的这个ASSERT就将避免但这是放纵内存泄露最好的解决办法是将静态链接也改成动态链接这样就使得DLL能够和应用程序共享同一个堆错误也得以避免。于是我修改了jsoncpp的项目配置生成jsoncpp的动态链接库而不是使用静态库重新导入到module.dll中错误解决。
http://www.pierceye.com/news/227037/

相关文章:

  • 自己做发卡网站wordpress搬家出问题
  • 网站建设数据库搭建秦皇岛市属于哪个省
  • 网站建设怎样找客户辽宁网站定制企业
  • 建设工程项目管理网站上海it公司
  • 网站运营需要 做哪些工作做网站需要了解的知识
  • 旅游去过的地方可做标识网站百度一下网页入口
  • 做ps找图的网站有哪些法与家国建设征文网站
  • 途途外贸企业网站管理系统aspnet网站模板
  • 网站建设企业网站常用参数
  • 深圳市建设工程质量检测网站网站建设公司 待遇
  • 站长工具大全php做在线直播网站
  • 品牌建设网站公司排名3d模型代做网站
  • 保定网站建设模板联系方式网站设计时图片怎么做
  • 网站策划书内容鄂尔多斯网站制作 建设
  • 广州展厅设计公司排名seo快速排名首页
  • 网站命名方式潍坊市建设工程管理处网站
  • 暴利产品竞价单页网站上海做网站建设的公司排名
  • 坪地网站建设如何做网站前端多少钱
  • 国内用不了的网站展示图片的网站模板
  • 网站优化首页付款网站制作职业
  • 做网站的软件有些什么建设公司门户网站
  • 浙江省长兴县建设局网站自己专业做网站
  • 做网站外包最牛的公司东莞网站制作十年乐云seo
  • 慈溪专业做网站公司网站后台内容更换怎么做
  • wordpress网站搭建教程视频网站优化前景
  • 门户网站的优点seo月薪
  • 怎样做网站静态什么网站做二维码比较好
  • 共享虚拟主机做网站够用么抖音短剧推广怎么做
  • 个人网站备案内容写什么西部数码网站管理助手v3.1
  • 搜索引擎 网站模板wordpress 图片走cdn