gpt4 book ai didi

c - 从链表出队时如何释放内存?

转载 作者:太空宇宙 更新时间:2023-11-04 03:18:50 25 4
gpt4 key购买 nike

我正在使用 malloc() 函数在 C 中创建一个队列,问题是当我使用 dequeue() 函数时我留下了一个未引用的元素。我必须每秒多次使用这个函数,所以我想知道哪种方法是处理它的最佳方法,或者是否有比使用 malloc() 更好的方法。这是两个函数:

void enqueue(struct Queue *q, char c){
//adds an element to the queue
struct Member* m = malloc(sizeof *m);//in order to make m global
if(!m){ perror("malloc");exit(EXIT_FAILURE);}
if(q->length == 0){

m->ch = c;
q->first = m;
q->last = m;

}else{
m->ch = c;
q->last->next = m;
q->last = m;
}
q->length++;
}

char dequeue(struct Queue *q){
//returns the first element of the queue an delete it
char c;
if(q->length >0){
q->length--;
c = q->first->ch;
q->first= q->first->next;
//CLEAR THE UNREFERENCED VARIABLE
}
return c;
}

谢谢!

编辑:

这些是我正在使用的结构:

typedef struct Queue{
int length;
struct Member *first;
struct Member *last;
}Queue;

typedef struct Member{
char ch;
struct Member *next;
}Member;

最佳答案

存储unreferenced variabletemporary variable首先这样你就可以free它在更改队列的第一个节点之后。

//returns the first element of the queue and delete it
char dequeue(struct Queue *q){

struct Member* temp = q->first;;
char c;

if(q->length >0){
q->length--;
c = q->first->ch;
q->first= q->first->next;
free(temp);
}
return c;
}

您可以查看更多关于 free 的信息here .

关于c - 从链表出队时如何释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48613835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com