2015-08-28 177 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有效信息?