gpt4 book ai didi

c - 以下C代码中的内存丢失

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

我在以下排队代码中丢失了 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 无法报告丢失的位置,它只能跟踪分配和释放。

也许您在某个算法中丢失了一些节点,由于节点数量减少,这应该很容易测试,但也可能是代码中存在释放数据结构的错误。

关于c - 以下C代码中的内存丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7106750/

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