我正在编写一个程序,它将获取一个数组,堆积它,然后找到第k个最小的元素。从我的教科书中我可以得到很多需要的算法,但我现在卡住了,因为每当我尝试测试程序时,我都会收到分段错误。 在结构中的教科书中它的PQ_SIZE大小为q,但是我无法弄清楚为什么或如何使这个工作,所以我做了6因为我测试的是5,但每当我编译程序时请输入5作为我的第一个数字,即使它小于6,我也会收到分段错误。我只是感到困惑,对我的代码的任何建议都会非常感谢,谢谢。
答案 0 :(得分:1)
在main()
中您传递了*heap
,这是指向pq_init()
的未初始化指针,您要为其成员分配值
priority_queue* heap;
pq_init(heap);
这将导致未定义的行为,您需要在使用它之前将内存分配给heap
答案 1 :(得分:1)
您是否实际编译过发布的代码?
编译器输出的一条警告消息是priority_queue *heap;
未被初始化使用。
具体来说,指针传递给函数:pq_init()
。
函数:pq_init()
取消引用字段n
的指针。
但是,指针:heap
尚未分配给应用程序拥有的内存中的某个区域(对malloc()
的调用会修复该问题)。实际上,指针heap
包含垃圾碰巧位于指针所在堆栈的位置。
注意:结构priority_queue
的定义没有tag
名称。使用调试器逐步执行程序时,缺少标记名称将是一个问题。
====
变量(和参数)名称应指明content
或usage
(或更好,两者)。 i
,j
,q
,p
,x
等名称即使在当前背景下也毫无意义,
====
代码应遵循公理:每行只有一个语句,并且(最多)每个语句一个变量声明。
====
为了便于阅读和理解: