我想删除链表的第一个节点(如下图所示)

Τhe的结构如下:
typedef struct PageEntry { //Node
unsigned int page_number;
char mode;
int count, R;
struct PageEntry *next;
}PE;
typedef struct Element {
int val;
PE* pe;
}Element;
typedef struct PageTable {
int p_faults, reads, writes, disk_writes, maxFrames, usedFrames;
char* algorithm;
Element* el;
}PT;我尝试删除第一个节点的代码如下所示。
PE *cur = pt->el[pos].pe;
PE *prev =NULL, *temp = cur;
if(cur->count == min){ //head node
if(cur->mode == 'W'){
pt->disk_writes++;
}
if (cur->next == NULL) {
memset(cur, 0, sizeof(PE));
free(pt->el[pos].pe);
cur = NULL;
}
else {
cur = temp->next;
free(temp);
}我正在使用Visual Studio,当我空闲时,我会得到一些奇怪的值,就像你在截图中看到的那样。我不能理解发生了什么

发布于 2020-12-31 08:04:37
您的图表描述的不是一个列表,而是一个列表数组。这本身就很好。但是--为什么要把实际列表的代码和将页表作为一个整体处理的代码混在一起呢?还不清楚你到底在哪里决定你需要删除一个列表节点(即一个页面条目)。您还隐含地假设列表不为空。你在做不必要的记忆设置。最后,也是最重要的一点--当你free(temp)的时候,不要把pt->el[pos].pe设置为指向cur->next。因此,它继续指向您刚刚释放的元素。
https://stackoverflow.com/questions/65515006
复制相似问题