我绝不是c中的专业人士,我正在尝试使用*搜索在C中实现8滑动拼图。我使用优先级队列作为我的开放列表,我在初始化时遇到问题。
from test import debug_flag
def print_flag():
print(debug_flag['setting'])
def set_flag(setting):
debug_flag['setting'] = setting
set_flag(True)
print_flag()
同时我传递的节点* root作为参数也在地址0x600039cf0,它包含我的电路板状态然后改变而不是它应该是什么。
为什么优先级队列指针被初始化为已在使用的地址?
**编辑我的不好,初始化不是我要找的术语,initQueue工作正常,它是 instantiation ,这让我烦恼。它占用了我的根指针已经指向的内存的一部分,并且其中有一些数据。我想知道如何制作
node* a_star(node* root, int goal[3][3]) {
int i;
node* actual_node;
PQ *q; // this shows up as q:0x600039cf0 in debugger
initQueue(q, 0);
enqueue(*create_heapNode(root, root->h+root->g), q);
listNode* head = NULL;
没有指出我已经使用的地址。
答案 0 :(得分:0)
这在调试器中显示为
q:0x600039cf0
这是因为q
尚未初始化,因此它包含垃圾。 q
可能包含此特定“垃圾”值的一个原因是局部变量q
的位置已被指向root
指针或其副本的指针占用。
更重要的问题是q
调用initQueue(q, 0)
后不会发生变化的原因。发生这种情况是因为指针q
是按值传递的;在init
函数内完成的任何赋值都将被忽略。
您应该更改initQueue
的签名以返回新分配的对象,或者通过指针获取其第一个参数,即
initQueue(&q, 0);