指向struct的指针初始化为已经在使用的地址

时间:2018-04-11 19:04:50

标签: c pointers struct memory-address

我绝不是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;

没有指出我已经使用的地址。

1 个答案:

答案 0 :(得分:0)

  

这在调试器中显示为q:0x600039cf0

这是因为q尚未初始化,因此它包含垃圾。 q可能包含此特定“垃圾”值的一个原因是局部变量q的位置已被指向root指针或其副本的指针占用。

更重要的问题是q调用initQueue(q, 0)后不会发生变化的原因。发生这种情况是因为指针q是按值传递的;在init函数内完成的任何赋值都将被忽略。

您应该更改initQueue的签名以返回新分配的对象,或者通过指针获取其第一个参数,即

initQueue(&q, 0);