heap.c中split_chunk()函数中指针操作的疑问
nekopara-orz opened this issue · 2 comments
nekopara-orz commented
split_chunk()函数缺少了
next_chunck->next->prev = next_chunck;
如果不这样的话 newchunk->next->pre永远指向 chunk 而不是 newchunk。
是否应该添加这样的代码
if(newchunck->next) {
newchunck->next->prev = newchunck;
}
Deleted user commented
newchunk->next->pre并没有指向chunk,而是默认值NULL,只有已经被申请的内存块的pre指针才有意义(:smile:我瞎猜的,欢迎大佬批评指正
nekopara-orz commented
newchunk->next->pre并没有指向chunk,而是默认值NULL,只有已经被申请的内存块的pre指针才有意义(😄我瞎猜的,欢迎大佬批评指正
1->2
考虑这样一种情况,在某次分配、合并结束后有上面这两块内存,1号没被分配2号被分配了这时候2指向1。
1->3->2
这时候我又从1中分配了了一块内存这时候newchunk就是3,3的next->pre如果不更改的话就会还指向1也就是2的pre还是1不是3。
那么如果3被分配出去了。1和2回收时不管3回收没都会被glue函数回收掉。