Debug Assertion Failed! Expression: _pFirstBlock == pHead

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

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

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

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

2.可能是在一个多线程模块了运行了一个单线程库,内存在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

时间: 2024-08-12 11:23:58

Debug Assertion Failed! Expression: _pFirstBlock == pHead的相关文章

关于Debug Assertion Failed问题

Debug Assertion Failed program:D\... LINE:1044 Expression:_CrtIsValidHeapPointer(pUserData) for information on how your program can cause an assertion failure,see the Visual C++ documentation on asserts. (Press Retry to debug the application) 学习链表时遇到

C++读一行到string中与vc的debug assertion failed!问题

将输入的一行读到string中不需要像用数组那样,考虑给多少大小的空间,这可以使得做acm题更加方便. c++98有两个函数可以读一行到string中,如下: istream& getline (istream& is, string& str, char delim); istream& getline (istream& is, string& str); 例子: #include <iostream> #include <string

MFC:“Debug Assertion Failed!” ——自动生成的单文档程序项目编译运行就有错误

今天照着孙鑫老师的VC++教程学习文件的操作,VS2010,单文档应用程序,项目文件命名为File,也就有了自动生成的CFileDoc.CFileView等类,一进去就编译运行(就是最初自动生成的项目),编译通过,可运行时直接弹出错误框,有点小懵,,,啥都没做就给我看这个: 图一   错误提示框 后来搜索一查,网上好多类似的错误以及解决方案,几乎都试了个遍,有: 方法(1)-重新生成解决方案,或者将项目文件目录下Debug文件夹删了,重新生成Release版: 方法(2)-可以先声明一个临时的C

debug assertion failed

vs2008 调试报错 #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]){ FILE *fp,*ofp; void filecopy(FILE *,FILE *); if(argc == 1) filecopy(stdin,stdout); else while(--argc>0) if((fp=fopen(*++argv,"r"))==NULL) printf("cat:can't o

C++析构函数造成Debug Assertion Failed的问题

昨天写了两个程序,均出现了析构函数造成Debug Assertion Failed的问题,由于是初学c++怎么想也想不通问题出在哪里.今天早上经人指点终于明白问题所在了.下面贴出代码和问题解析:(以下内容摘自本人在csdn论坛求助的帖子) 第一个问题程序://Teacher_Level.h #pragma once#include<iostream>using namespace std;int num=0;class Teacher{public:char *title; Teacher()

void CWnd::SetWindowText(LPCTSTR lpszString) ASSERT(::IsWindow(m_hWnd)); Debug Assertion Failed

void CWnd::SetWindowText(LPCTSTR lpszString) ASSERT(::IsWindow(m_hWnd)); Debug Assertion Failed 原因: ID和Resource中的控件没有关联起来,导致运行的时候,发现hWnd没有相应的对象,没有实例化,hWnd是NULL void CWnd::SetWindowText(LPCTSTR lpszString) ASSERT(::IsWindow(m_hWnd)); Debug Assertion F

Debug Assertion Failed解决方法! !!

Debug Assertion Failed解决方法! !! 2011-10-28 22:23 1569人阅读 评论(0) 收藏 举报 delete测试  VC++调程序出现如下错误:   Debug   Assertion   Failed!       Program:   D:\wyuStud\debug\wyuStud.exe     File:   afx.inl           Line:157      可能问题:1.野指针;2.内存泄露  解决方法:   1.看一看你的程序里

opencv检错:程序运行过程正常,当跳出函数时出现断言错误(Debug Assertion Failed)

转载http://blog.csdn.net/u012327581/article/details/51351780 1.问题描述 在VS2015下配置好Opencv后,程序在函数运行过程中正常,调试时发现,当运行至跳出函数时,出现断言错误. 2.原因分析 单步跟踪调试发现,在函数结束时会进行vector的析构,出现了析构错误.并且,如果vector在定义完成之后,进行resize或reserve操作,将vector空间做大,问题消失.后来查阅资料,结合亲身测试,发现是在调用Opencv 库时,

MFC中的Debug Assertion Failed 如何查找原因

编写MFC程序时经常会遇到下图所示的断言失败问题 报错对话框中给出了一个目录,是在F盘,但是查找之后会发现电脑里可能根本没有这个目录. 最后发现可以在VS的安装目录下找到这个文件: \atlmfc\src\mfc 这部分路径是固定的. 找到文件,打开,看到报错提示的592行. ASSERT(pSocket!=NULL); 原来是指针为空导致ASSERT报错. 可以在自己程序里把指针处理的地方加个ASSERT或者try-catch一下. 参考文献: [转]dlgdata.cpp line 40 断