EXC_BAD_ACCESS创建子节点(C)



我尝试应用其他线程关于EXC_BAD_ACCESS消息的建议,但没有成功。注释出现在Node Create_Child (Node Parent_Node, int item) {旁边。

typedef struct {
    int Win_Loss;
    int parent;
    int identifier;
    int Object_Moved;
    int Wolf; 
    int Goat;
    int Salad;
    int Boat;
} Node;

Node Create_Child (Node Parent_Node, int item) {
    Node Child;
    Child.Boat = (-1)*Parent_Node.Boat;
    Child.Wolf = Parent_Node.Wolf;
    Child.Goat = Parent_Node.Wolf;
    Child.Salad = Parent_Node.Salad;
    int* Child_Items[] = {&Child.Wolf, &Child.Goat, &Child.Salad, &Child.Boat};
    Child.parent = Parent_Node.identifier;
    Child_Items[item][0] *= (-1);
    Child.Object_Moved = item;
    return Child;
}

见解吗?内存分配似乎不是问题,但我可能没有看到什么

指针,例如Child。Wolf是本地函数,它们在Create_Child函数之外没有任何意义,但是你将这些地址分配给Child.Object_Moved并返回它的副本。

你应该在堆上分配Child而不是

Node* Create_Child(Node Parent_Node, int item) {
Node* Child = malloc(sizeof(Node));
Child->Boat = -1*Parent_Node.Boat;
...
int* Child_Items[] = { &Child->Wolf, .. };

检查函数的所有参数也是很好的在使用之前。例:item在射程内?, Parent_Node有效信息?

最新更新