1

内存释放问题更大,因为在释放时缺少一条信息——我们只有一个释放指针,我们不知道该指针属于哪个 Chunk。我们可以遍历 chunks_ 并检查给定的指针是否落在 pData_ 和 pData_ + blockSize_ * numBlocks_ 之间。

来自现代 C++ 设计 2001,第 76 页

如果我的理解是正确的,用于检查给定指针是否指向给定数组中的元素的算法涉及比较来自不同数组的两个指针。如果比较运算符是 >= 或 <=(很有可能?),那么这将导致未定义的行为。

但是作者并没有明确说明这个程序或操作符,这将把这个问题留给读者。(还是作者搞错了?起码可以给个提示。)

一种解决方案是使用 !=,这将使释放速度慢 100 倍。或者,在某些情况下,某些未定义的行为是可以容忍的。那么在什么情况下,可以愉快地容忍上述未定义的行为呢?

4

0 回答 0