Я получаю потерю памяти в 16 байт в следующем коде для очередей.Не могли бы вы дать мне знать, как можно избавиться от этой проблемы?Код:
void enqueue( enqueuenode * queueNode1 ,bplus *bplusNew){
[98] -> enqueue *queue=NULL;
queue = malloc(sizeof(enqueue_node));
queue->bplus = bplusNew;
queue->next= NULL;
if(queueNode1->headNode == NULL){
queueNode1->headNode=queueNode1->tailNode = queue ;
}
else{
queueNode1->tailNode->next = queue;
queueNode1->tailNode = queue;
}
}
Ниже приведены две структуры
typedef struct enqueue_help{
bplus bplusNode;
struct enqueue_help * next;
}*enqueue,enqueue_node;
typedef struct enqueuenode_help{
enqueue headNode;
enqueue tailNode;
}*enqueuenode,enqueuenode_node;
И для приведенного выше кода следующий вывод valgrind:
=23800== 272 (16 direct, 256 indirect) bytes in 1 blocks are definitely lost in loss record 8 of 12
==23800== at 0x4C2260E: malloc (vg_replace_malloc.c:207)
==23800== by 0x4024BD: enqueue(bplus.c:98)
==23800== by 0x40260A: PrintBplus (bplus.c:202)
==23800== by 0x40286F: main (bplus.c:1251)
==23800==
Здесь enqueuenode
это указатель на структуру, которая содержит два enqueue
в качестве головного узла и хвостового узла.Это для обхода очереди при снятии очереди.Каждый queue
является указателем на структуру, которая содержит некоторый адрес узла, который должен быть поставлен в очередь.