首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >free()函数C中奇怪的值

free()函数C中奇怪的值
EN

Stack Overflow用户
提问于 2020-12-31 07:53:28
回答 1查看 58关注 0票数 2

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

Τhe的结构如下:

代码语言:javascript
复制
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;

我尝试删除第一个节点的代码如下所示。

代码语言:javascript
复制
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,当我空闲时,我会得到一些奇怪的值,就像你在截图中看到的那样。我不能理解发生了什么

EN

回答 1

Stack Overflow用户

发布于 2020-12-31 08:04:37

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65515006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档