注意:这不是家庭作业IT与提供给我们按我们的教授模拟考试来帮助我们准备我们的考试写作,检查在C内存泄漏++测试用例
我目前正在研究编程考试。在他们给我们的样本测试之一中,我们有以下问题:
假设您已获得一个模板化容器,该容器包含无序的对象集合。
template <typename T>
class Container {
public:
void insert(T *op);
// EFFECTS: inserts the object pointed to by op into
// the container
T *remove();
// EFFECTS: removes an object from the Container, and
// returns a pointer to it. Returns NULL if no
// objects remain in the Container.
// Note: the implementation can choose which
// object to return if more than one exists.
Container(); // ctor
Container(const Container &l); // copy ctor
Container &operator=(const Container &l); // assignment
~Container(); // dtor
private:
...
};
请注意,这只是接口;为简洁起见,省略了实施细节。然而,你可能会认为实现是基于节点的;链接的节点集合 保存对象。
您怀疑析构函数的实现不满足最不变式的保守规则,而是正在泄漏内存。写一个验收测试(类似于项目4)来检查这种情况。您必须提供合适的包含类型和执行测试的主体。
请注意,您不能依赖任何语言未定义的行为,您可能不需要 假定您有来自Project 5的altnew分配器可供您使用,并且您可能不会 覆盖delete操作符。提示:您可以使用全局变量。
不过,我觉得是这样的:
#include <iostream>
using namespace std;
int *p = NULL;
void leak() {
int *num = new int(5);
p = num;
delete num;
}
int main() {
if ((*p = 6)) {
cout << "Memory leak\n";
} else {
cout << "No Leak\n";
}
}
这背后的基本思想是我,虽然我写不出来,我还没有分配的内存空间。在编译这个测试代码时,虽然它的工作很好,但显然你可以。有关如何编写这样的测试用例的想法?
自己所想的测试依赖于不确定的行为。当您访问free'd内存时会发生什么情况未定义。 – 2009-12-16 20:16:07
我想你可以用'Container <使用全局变量计算它本身的实例>'进行测试。 – UncleBens 2009-12-16 20:22:09
你可能想解释Project 5中的“altnew”分配器是什么。也许这为您提供了跟踪分配的工具。 – 2009-12-16 20:34:20