0

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

洞察はありますか?メモリ割り当ては問題ではないようですが、おそらく何かが表示されていません。

4

1 に答える 1

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有効な情報?

于 2015-08-28T04:31:13.480 に答える