Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从链表中退出队列时如何释放内存?_C_Queue_Malloc - Fatal编程技术网

C 从链表中退出队列时如何释放内存?

C 从链表中退出队列时如何释放内存?,c,queue,malloc,C,Queue,Malloc,我使用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 glob

我使用
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;

首先将
未引用变量
存储到
临时变量
,以便在更改队列的第一个节点后可以
释放它

//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;
}

你可以查看更多关于
免费的信息

为什么不免费呢?