【1】_BLOCK_TYPE_IS_VALID是什么错误?

(1)最简单的示例代码如下:

 void main()
{
int* pA = new int();
delete pA;
delete pA;
}

(2)运行后崩溃截图如下:

(3)分析结果:

这个assert说明什么问题呢?

说明有一块申请的内存在被释放的时候,它的“头部”里面的信息已经被改掉了,和预期的不一样。

内存分配的程序往往在被分配出的内存块“头部”放上一些校验信息。

当然,这个信息使用内存的用户是不知道也不应该修改的。

这样,在内存被释放的时候,内存分配程序就可以验对这个“头部”信息是否被改过。

若被改过,就说明发生了内存变异(memory corruption)。 这种corruption有两种可能性:

<1> 有人在内存越界写东西。

<2> 这块内存已经被释放掉。

不论哪种情况,当内存再进行释放时候会导致断言失败。

pHead_>nBlockUse指向的东西已经不存在了。

_BLOCK_TYPE_IS_VALID  块类型是否有效的宏

(4)使用过程举例:

最常见的一种写法:自定义一个类,类内部使用了指针成员变量,而指针成员变量在某个成员函数中被释放过 。

但是,释放后没有置空(pTemp = NULL),导致析构函数中再进行释放时候直接崩溃。

其实,简单的演示崩溃本质正如上所述。

Good  Good  Study, Day Day Up.

顺序  选择  循环  总结

指针二次释放(_BLOCK_TYPE_IS_VALID)的更多相关文章

  1. C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

    原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...

  2. C++笔记-数组指针/二维数组转换指针

    参考资料: 1. 作者 BensonLaur  :https://www.cnblogs.com/BensonLaur/p/6367077.html 2. https://blog.csdn.net/ ...

  3. C-指针,二级指针,二维数组作为函数参数使用,C语言链表(详解)

    一级指针 int *p;            //表示定义一个int型(4字节)的指针p &p                 //表示p自身的地址位置 p                  ...

  4. C++ 智能指针二

    /* 智能指针shared_ptr注意点 */ #include <iostream> #include <string> #include <memory> // ...

  5. C语言中的指针(二)

    指针指向谁,就把谁的地址赋给指针,指针变量和指针指向的内存变量是不一样的.不停的给指针赋值,相当于是不断的改变指针的指向. 在开发中要避免野指针的存在,在指针使用完毕之后,记得要给指针赋值成为NULL ...

  6. 15深入理解C指针之---内存释放

    一.手动申请的内存,必须及时进行内存释放,否则容易造成内存泄露.主要代码形式为: #include <stdio.h> #include <stdlib.h> int main ...

  7. C指针(二)

    原文链接:http://www.orlion.ga/924/ 一.指针与const限定符 const限定符与指针结合起来常见的情况有一下几种: const int *a; int const *a; ...

  8. 智能指针(二):shared_ptr实现原理

    前面讲到auto_ptr有个很大的缺陷就是所有权的转移,就是一个对象的内存块只能被一个智能指针对象所拥有.但我们有些时候希望共用那个内存块.于是C++ 11标准中有了shared_ptr这样的智能指针 ...

  9. int (*p)[4] p 是二级指针 二维数组 二级指针 .xml

    pre{ line-height:1; color:#2f88e4; background-color:#e9ffff; font-size:16px;}.sysFunc{color:#3d7477; ...

随机推荐

  1. Fiddler-002-常用配置修改

    日常在应用 Fiddler 进行网络抓包时,有时需要查看服务器的类型或者其他信息,此文主要讲述实际应用中针对 Fiddler 进行的定制化配置,以方便日常的工作学习. 第一:显示服务器的类型和请求域名 ...

  2. Java学习-019-Properties 文件读取实例源代码

    在这几天的学习过程中,有开发的朋友告知我,每个编程语言基本都有相应的配置文件支持类,像 Python 编程语言中支持的 ini 文件及其对应的配置文件读取类 ConfigParse,通过这个类,用户可 ...

  3. mac开启服务命令

    开启mysql   mysql.server start 开启nginx         sudo  nginx 重启nginx   sudo  nginx   -s   reload 开启apach ...

  4. 第三方Jar上传到Nexus3

    mvn deploy:deploy-file -DgroupId=ESPPaaSService -DartifactId=ESPPaaSService -Dversion=1.0 -Dpackagin ...

  5. Linux下设置网卡静态ip

    Linux下设置网卡静态ip 如果是服务器版,没有图形界面只用用命令行修改配置文件 如果是客户端版本,可以用图形界面 配置的前提是要在root用户下才能重启网卡服务 图形界面: system-conf ...

  6. APICloud请你看英特尔智能硬件大赛决赛直播

    英特尔智能硬件大赛由英特尔硬享公社(CCE)发起,联合了全国各地50余家产业链优秀合作伙伴,旨在集合全国硬创资源,携手寻找中国最具代表性的硬件创业项目,并通过技术支持.资源对接.产品推广等方式助力项目 ...

  7. 第六篇 SQL Server代理深入作业步骤工作流

    本篇文章是SQL Server代理系列的第六篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.每个作业步骤在技术 ...

  8. C# js asp.net 字符串MD5加密GetMD5Hash

    赵小虎老师 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sy ...

  9. nc:a test cmd for TCP HTTP

    docker 上需要nc 测试环境--internet上搜集了一些资料 ---------------------------------------------------------------- ...

  10. oracle导sql脚本

    在plsql里,新建命令窗口,输入如下命令 @d:\test.sql