使用devpartner的blockchecker检查c++内存错误
2016-02-16 21:23
323 查看
在仿写stl的过程中,被一处内存错误卡了很久。当内存池需要多次malloc时会出现堆损坏的错误,初步判断是数组越界,但总是检查不出来。一开始用Dr.Memory检查不出来,就试了一下devpartner。官网链接 http://www.borland.com/zh-CN/Products/Software-Testing/Automated-Testing/Devpartner-Studio
devpartner安装完后会自动在vs上装插件,但是那个插件好像没什么用。我是直接在安装目录下找到blockchecker,并用它打开要调试的exe,再点击运行,就能看到检测到的错误,如图
View Code
devpartner安装完后会自动在vs上装插件,但是那个插件好像没什么用。我是直接在安装目录下找到blockchecker,并用它打开要调试的exe,再点击运行,就能看到检测到的错误,如图
//返回一个大小为n的对象,并可能加入大小为n的其他区块到freelist //在ANSI c中,void *不允许进行加减操作,所以chunk用char * void *default_alloc::refill(size_t n) { int objs = 20; char *chunk = chunk_alloc(n, objs); obj *next = nullptr, *current = nullptr; obj *result = nullptr; obj **my_free_list = nullptr; if (1 == objs) //只取出一个区块 return chunk; my_free_list = free_list + FREELIST_INDEX(n); result = (obj *)chunk; //这一块返回给客户端 //将freellist指向分配的区域 *my_free_list = next = (obj *)(chunk + n); for (int i = 1;; i++) { current = next; next = (obj *)((char *)next + n); //这里注意不能直接用next+n if (i == objs - 1) { current->next = nullptr; break; } else current->next = next; } return result; }
View Code
相关文章推荐
- c++实用语法
- 好用的C++数据库访问层
- 20160203.CCPP体系详解(0013天)
- C语言程序设计-第7章 用函数实现模块化程序设计
- C++运算符优先级列表
- 198. House Robber(C++实现)
- 20160202.CCPP体系详解(0012天)
- 【POJ 3461】Oulipo 中文题意&题解&代码(C++)
- 【C++】顺时针打印矩阵
- 20160201.CCPP体系详解(0011天)
- 20160131.CCPP体系详解(0010天)
- bzoj 3238 差异
- 20160130.CCPP体系详解(0009天)
- 二叉树层次遍历(C语言实现)
- 面向对象课程 - 寒假第三次作业 - C++计算器项目初始部分
- c++參数传递
- C语言-内存对齐
- C++STL-全排列
- C++中指针和引用的区别
- C语言语法