2007-08-24

BoundsChecker的一个不足

先看如下代码断:
    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 操作,问题一样。

No comments: