为什么我在 heapify/find 分钟程序中收到分段错误?
Why am I recieving a segmentation fault in my heapify/find min program?
我正在编写一个程序,它将获取一个数组,对其进行堆化,然后找到第 k 个最小的元素。从我的教科书中,我能够得到很多需要的算法,但我现在被卡住了,因为每当我试图测试程序时,我都会收到一个分段错误。
在结构的教科书中,它有 PQ_SIZE 作为 q 的大小,但我不知道为什么或如何使它起作用,所以我把它设为 6,因为我一直在测试的 n 是 5,但是每当我编译程序然后输入 5 作为我的第一个数字,我收到一个分段错误,即使它小于 6。我只是一般的困惑,任何关于我的代码的建议都将不胜感激,谢谢。
在 main()
中,您传递了 *heap
,它是指向 pq_init()
的未初始化指针,您在其中为其成员赋值
priority_queue* heap;
pq_init(heap);
这将导致未定义的行为,您需要在使用前为 heap
分配内存
你真的编译过发布的代码吗?
编译器输出的警告消息之一是 priority_queue *heap;
未初始化使用。
具体来说,指针传递给函数:pq_init()
.
函数:pq_init()
解除对字段 n
.
的指针的引用
但是,指针:heap
尚未分配给应用程序拥有的内存中的某个区域(调用 malloc()
可以解决该问题)。实际上,指针 heap
包含垃圾恰好位于指针所在堆栈中的位置。
注意:结构 priority_queue
的定义没有 tag
名称。使用调试器单步执行程序时,缺少标记名称将是一个问题。
====
变量(和参数)名称应指示 content
或 usage
(或更好,两者)。 i
、j
、q
、p
、x
等名称毫无意义,即使在当前上下文中,
====
代码应遵循公理:每行只有一个语句,每个语句(最多)一个变量声明。
====
为了便于阅读和理解:
- 通过单个空行分隔代码块(for、if、else、while、do...while、switch、case、default)。
- 用 2 或 3 个空行分隔函数(保持一致)
我正在编写一个程序,它将获取一个数组,对其进行堆化,然后找到第 k 个最小的元素。从我的教科书中,我能够得到很多需要的算法,但我现在被卡住了,因为每当我试图测试程序时,我都会收到一个分段错误。 在结构的教科书中,它有 PQ_SIZE 作为 q 的大小,但我不知道为什么或如何使它起作用,所以我把它设为 6,因为我一直在测试的 n 是 5,但是每当我编译程序然后输入 5 作为我的第一个数字,我收到一个分段错误,即使它小于 6。我只是一般的困惑,任何关于我的代码的建议都将不胜感激,谢谢。
在 main()
中,您传递了 *heap
,它是指向 pq_init()
的未初始化指针,您在其中为其成员赋值
priority_queue* heap;
pq_init(heap);
这将导致未定义的行为,您需要在使用前为 heap
分配内存
你真的编译过发布的代码吗?
编译器输出的警告消息之一是 priority_queue *heap;
未初始化使用。
具体来说,指针传递给函数:pq_init()
.
函数:pq_init()
解除对字段 n
.
但是,指针:heap
尚未分配给应用程序拥有的内存中的某个区域(调用 malloc()
可以解决该问题)。实际上,指针 heap
包含垃圾恰好位于指针所在堆栈中的位置。
注意:结构 priority_queue
的定义没有 tag
名称。使用调试器单步执行程序时,缺少标记名称将是一个问题。
====
变量(和参数)名称应指示 content
或 usage
(或更好,两者)。 i
、j
、q
、p
、x
等名称毫无意义,即使在当前上下文中,
====
代码应遵循公理:每行只有一个语句,每个语句(最多)一个变量声明。
====
为了便于阅读和理解:
- 通过单个空行分隔代码块(for、if、else、while、do...while、switch、case、default)。
- 用 2 或 3 个空行分隔函数(保持一致)