我最近有一项作业涉及删除表示为指向单页内存的双指针的内存块。
基本上,我首先有一个
Page
指针数组。每个 Page
都有一个 next_free
和 prev_free
字段,它们都指向 Page*
。我正在尝试将 Page*
页面添加到 Page*
指针的链接列表中。
我正在浏览
head
被 pageArray[0]
指向的链表。遍历这个页面列表,根据它的Page*
.在合适的地方插入输入
value
指针
struct Page {
int value;
Page* next_free;
Page* prev_free;
};
Page* pageArray[10]
void insertPage(Page* page) {
Page** currPage = &pageArray[0];
while (*currPage) {
double value = (*currPage) -> value;
if (value < page -> value) {
currPage = &(*currPage) -> next_free;
}
else {
break;
}
}
Page** prevPage = &(*currPage) -> prev_free;
std::cout << "Value of current block: " << (*currPage)->value << std::endl;
(*prevPage) -> next_free = page;
std::cout << "Value of current block after changing previous block: " << (*currPage)->value << std::endl;
(*currPage) -> prev_free = page;
}
我添加了 print 语句以查看会发生什么,似乎在执行
(*prevBlock) -> next_free = page
行时,(*currBlock)
指针发生了变化。我以为它会存储上一个块的地址,我可以在不改变(*prevBlock)
的情况下改变(*currPage)
。
这样做的正确方法是什么?为什么
(*currBlock)
会改变?