Tag: priority queue

Valgrind:无效读取大小4 – > sigsegv,没有valgrind和视觉工作室工作正常

我已经实现了一种压缩算法(使用霍夫曼编码),它使用节点的优先级队列(我定义的结构)。 现在,当我在linux或visual studio中运行代码时,一切正常。 当我检查visual studio中的内存泄漏时,没有给出。 现在的问题是,当我使用valgrind分析我的程序时,它终止于信号11(sigsegv)。 遇到的第一个错误是方法delete min中的“无效读取大小4”。 之后的其他错误是:Adress在大小为453的块中释放0字节,无效写入大小4,无效释放,删除或重新分配。 任何人都可以给我一些关于我可能犯的错误的建议吗? 我一直在互联网上搜索几个小时,但找不到我做错了什么(特别是因为它在没有使用valgrind时才起作用)。 或者提示如何调试并找出导致读取错误的原因。 非常感谢! 这是代码,以防有人想要查看它,但我想这并不是那么容易潜入这个特定的代码。 我猜它与代码的优先级队列有关: 我做霍夫曼部分的部分 – >每次删除2个最小节点并将两者的总和作为一个节点添加。 while(queue->size > 1){ node* n1 = delete_min(queue); node* n2 = delete_min(queue); // all the errors are encountered in this call node* temp = (node*) calloc(sizeof(node),1); temp->amount = n1->amount + n2->amount; insert_node(queue,temp); n1->parent = temp; n2->parent = temp; […]