指针二次释放(_BLOCK_TYPE_IS_VALID)
【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)的更多相关文章
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...
- C++笔记-数组指针/二维数组转换指针
参考资料: 1. 作者 BensonLaur :https://www.cnblogs.com/BensonLaur/p/6367077.html 2. https://blog.csdn.net/ ...
- C-指针,二级指针,二维数组作为函数参数使用,C语言链表(详解)
一级指针 int *p; //表示定义一个int型(4字节)的指针p &p //表示p自身的地址位置 p ...
- C++ 智能指针二
/* 智能指针shared_ptr注意点 */ #include <iostream> #include <string> #include <memory> // ...
- C语言中的指针(二)
指针指向谁,就把谁的地址赋给指针,指针变量和指针指向的内存变量是不一样的.不停的给指针赋值,相当于是不断的改变指针的指向. 在开发中要避免野指针的存在,在指针使用完毕之后,记得要给指针赋值成为NULL ...
- 15深入理解C指针之---内存释放
一.手动申请的内存,必须及时进行内存释放,否则容易造成内存泄露.主要代码形式为: #include <stdio.h> #include <stdlib.h> int main ...
- C指针(二)
原文链接:http://www.orlion.ga/924/ 一.指针与const限定符 const限定符与指针结合起来常见的情况有一下几种: const int *a; int const *a; ...
- 智能指针(二):shared_ptr实现原理
前面讲到auto_ptr有个很大的缺陷就是所有权的转移,就是一个对象的内存块只能被一个智能指针对象所拥有.但我们有些时候希望共用那个内存块.于是C++ 11标准中有了shared_ptr这样的智能指针 ...
- int (*p)[4] p 是二级指针 二维数组 二级指针 .xml
pre{ line-height:1; color:#2f88e4; background-color:#e9ffff; font-size:16px;}.sysFunc{color:#3d7477; ...
随机推荐
- iOS FMDB小试了一下
今天从早上9点,一直在看FMDB,知道中午11:40.我的效率是不是很低下.中间也碰到了几个小bug. 虽然做了一个小demo,但是觉得还比不上在项目中使用中锻炼的多,先暂且一总结. 先下载FMDB的 ...
- Given a binary tree containing digits from0-9only, each root-to-leaf path could represent a number. An example is the root-to-leaf path1->2->3which represents the number123. Find the total sum of a
class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public class ...
- 利用utl_file来读取文件.
以前写过用external table来加载trace文件,详情参考下面链接. http://www.cnblogs.com/princessd8251/p/3779145.html 今天要做到是用U ...
- Using dbms_shared_pool.purge to remove a single task from the library cache
我们都知道可是使用 alter system flush shared_pool 来清除shared pool 信息,当时不能指定清除某个对象.因为在系统繁忙的时侯 使用 alter system f ...
- Power Bi的优势 特色功能
Power-BI可以让决策者不再依赖他人,就可及时.准确(没有人为加工,自然是最准确的)的得到各种关键经营数据: Power-BI不仅仅是让报表自动生成,而是完全改变了获取经营数据的方式,它可以直观的 ...
- javaScript学习之ajax
一.xmlHttpRequest对象的创建 ajax的核心的XMLHttpRequest对象,下面的代码给出了兼容各个浏览器的方法实现 function createXHR(){ if(typeof ...
- Git和SSH协议
SSH(安全外壳协议)为Secure Shell的缩写,由IETF的网络工作小组(Network Working Group)所制定:SSH为建立在应用层和传输层基础上的安全协议.SSH是目前较可靠, ...
- UIImagePickerController
1.+(BOOL)isSourceTypeAvailable:(UIImagePickerControllerSourceType)sourceType; 检查指定源是 ...
- python 归档tarfile,zipfile学习
一.tarfile 用法: tarfile.open(cls, name=None, mode='r', fileobj=None, bufsize=10240, **kwargs) 返回一个Tar ...
- Azure billing 分析
昨天把西欧的2012的VM删掉,在北美新建一个2008的VM,装了sql2005 express 在C盘,这样存储就变成2个位置了,西欧和美国,然后放在那里不操作一天,发现billing多了很多, S ...