在下面的C代码记忆力减退

我得到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; } }

下面是两个strucutres

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的,第二个可能是你缺少的内存。

分类:C# 时间:2015-03-15 人气:0
本文关键词: 内存泄漏,的valgrind
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.743 (s). 10 q(s)