2015-08-28 140 views
0

我试过应用来自其他线程的有关EXC_BAD_ACCESS消息的建议,但没有成功。该注释出现在Node Create_Child (Node Parent_Node, int item) {旁边。EXC_BAD_ACCESS创建子节点(C)

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; 
} 

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

+2

'item'的价值是什么?它是> = 0和<= 3? – timrau

+0

是的。对不起,我应该指定。 –

回答

0

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

你应该在堆中分配,而不是儿童

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有效信息?