[英]memory loss in the following C code
我在下面的代碼排隊中得到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
都是結構的指針,該結構包含一些需要排隊的節點地址。
在這里分配丟失的內存。
Valgrind無法報告丟失的位置,它只能跟蹤分配和釋放。
也許您丟失了一種算法中的某些節點,由於節點數減少,因此應該很容易測試,但是代碼中有可能會釋放數據結構的錯誤。
為什么要給指向enqueue
的指針分配一個大小為enqueuenode
的內存塊,這是有原因的嗎?
[98] -> enqueue *queue=NULL;
queue = malloc(sizeof(enqueuenode));
如您所說,如果enqueuenode
包含兩個enqueue
,則第二個可能是您缺少的內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.