先看如下代码断:
BYTE * pTemp = (BYTE *)malloc(1);
pTemp[2] = '1';
free(pTemp);
BoundsChecker没有对 pTemp[2] = '1' 报错。
但是,在 free(pTemp) 时却提示memory overrun。
如果 malloc 和 free 两个语句不是在一起(比如在一个类的不同函数中),那么想找到内存被覆盖的地方是相当困难的。
但是,如果仅仅是这样,能报错还总算不错了。再看如下代码:
BYTE * pTemp = (BYTE *)malloc(1);
pTemp[20] = '1';
free(pTemp);
这次连 free(pTemp) 时都不提示了。这是因为BoundsChecker对申请的内存加了一些标志,如果这些标志没有被破坏,那么BoundsChecker是不能发现的。
对于 new 和 delete 操作,问题一样。
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment