zoukankan      html  css  js  c++  java
  • (转)Debug Assertion Failed! Expression: _pFirstBlock == pHead

     

    最近在VS上开发C++程序时遇到了这个错误:

    Debug Assertion Failed! Expression:_pFirstBlock == pHead

    如图

    点击Abort之后,查看调用栈,发现异常在函数return时被时产生,进一步看是vector的析构函数被调用时产生,以前没开发过C++项目,没什么经验,这个错误让我很困惑,第一,我电脑上并没有f盘;第二,我并没有调用析构函数;第三,这到底是个什么错误

    第一个问题,大概是一个虚拟的分区吧,第二个问题,我的vector变量是在一个函数体内部声明使用的,函数返回的时候,自动变量生命期结束,C++应该会调用vector的析构函数来释放这个对象,就在这个时候发生了异常

       

    关于第三个问题,我在网上查了一些资料,发现大概有以下几种情

       

    混淆了 DebugRelease情况,有时DebugRelease所需要的库是不一样的,如果你只导入了Release的链接库,而没有导入Debug的链接库,而编译运行时又选择了Debug模式,就可能出现这种问题,这时要把Debug的链接库添加进去可能就会解决

       

    可能是在一个多线程模块了运行了一个单线程库,内存在dll一侧被分配,在使用一侧被释放,可能导致一个内存管理器在分配内存,另一个内存管理器在释放同一片内存区域,导致错误

    C++STL是单线程的,我在函数内部使用了vector,这个函数在一个多线程的环境里,大概就是这个错误产生的原因

    一个解决方式就是设置运行库 /MDd

    工程上右键-》属性-C/C++=》所有选

     

    关于运行库几个参

    多线程(/MT)
    多线程调试(/MTd)
    多线程 DLL (/MD)
    多线程调试 DLL (/MDd)

    名字后带d的是debug,名字含D是动态链接,含T是静态链


    C
    运行时库                                         库文件
    MultiThread(static link)MT                     libcmt.lib
    Debug multiThread(static link)MTd           libcmtd.lib
    MultiThread(dynamic link)MD                  msvert.lib
    Debug multiThread(dynamic link) MDd      msvertd.lib 

       

    另:使用std::string时产生这个错误的解决方法

    http://stackoverflow.com/questions/18882760/debug-assertion-failed-expression-pfirstblock-phead

     

    来自: http://blog.csdn.net/giantpoplar/article/details/47295877

     

    我的一个项目在Debug的时候出现问题,用Release编译了一下,修复了Release配置中引入有问题的lib,编译通过后,运行Release版本就解决了。

  • 相关阅读:
    工作中搜索页面搜索记录功能的封装(存储到本地)
    工作中遇到的git问题
    Git 常用命令
    帮女票做的报表(用到了angular的一些指令)
    HTML和CSS的知识点
    动画制作 手机APP制作以及响应式的实现
    CSS新内容
    JS中的循环嵌套 BOM函数
    fullpage的使用以及less, Sass的属性和JQuery自定义插件的声明和使用
    Javascript的内容
  • 原文地址:https://www.cnblogs.com/time-is-life/p/7019064.html
Copyright © 2011-2022 走看看