【发布时间】:2011-12-23 01:55:51
【问题描述】:
这是一项学校作业,我可以控制大部分,但有一小部分会造成内存泄漏,我对如何修复它没有更多想法。
我们已经创建了一个内存分配器,麻烦的是这两个函数。
第一个不能修改
void destroy (){
free():
tot_alloc = 0; }
第二个是我正在做的
void free(){
munmap(pool, PAGE_SIZE);
Page* f = this;
f = f->prev;
if (f != NULL)
f->destroy();
}
我已经编写了所有的 free() 函数,并在作业中被要求调用 destroy()。 我意识到这个函数并没有破坏第一个“this”,因为它会立即进入 f->prev,但我不知道如何让它首先破坏这个并进入 prev。
我希望这不是一个太愚蠢的问题。
非常感谢!
尼哥
【问题讨论】:
-
你提到的东西叫做析构函数——不是解构函数。
-
你关注rule of three了吗?
-
目前还不清楚这段代码应该做什么。 'free' 是否应该在双向链表的每个元素上调用 'destroy'?还是应该从双向链表中删除此页面?我们为什么要销毁这个页面之前的页面?
-
@DavidSchwartz free() 应该在单链表的每个元素上调用 destroy()。我们在此页面之前销毁页面的原因是因为我无法解决这个问题,这是我的问题。我怎样才能销毁此页面,然后按照销毁所有其他页面
-
您真的是指单链表中一个条目的“免费”成员函数应该释放该列表中的每个条目? (你还有什么其他指针?你有指向列表中第一个条目的指针吗?最后一个?成员有'next'指针和'prev'指针吗?)
标签: c++ memory-leaks memory-management destructor