您的位置:首页 > 编程语言 > C语言/C++

使用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,再点击运行,就能看到检测到的错误,如图

//返回一个大小为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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: