1

Cに再帰関数があり、返された構造体ポインターを関数の新しい構造体にしたいと思います。返された構造体は変更されないため、問題が発生しています。これが私のコードの構造です。

struct location_t{
   int x,y;
   location_t * next;
   int dir;
}

location_t * recursive_foo(location_t * loc, maze_t * m){

    int x = loc->x;
    int y = loc->y;
    int dir = loc->dir;

    loc->next = malloc(sizeof(location_t));
    location_t * temp = loc->next;

    if(m->map[--x][y] != '#' && dir != 0){
        temp->x = x;
        temp->y = y;
        temp->dir = 2;
        loc = recursive_foo(temp);
    }
    if(m->map[--x][y] != '#' && dir != 1){
        temp->x = x;
        temp->y = y;
        temp->dir = 3;
        loc = recursive_foo(temp);
    }
    if(m->map[--x][y] != '#' && dir != 2){
        temp->x = x;
        temp->y = y;
        temp->dir = 0;
        loc = recursive_foo(temp);
    }
    if(m->map[--x][y] != '#' && dir != 3){
        temp->x = x;
        temp->y = y;
        temp->dir = 1;
        loc = recursive_foo(temp);
    }

    return loc;

}   

返された構造体は変更されないため、問題が発生しています。

これは、相互に参照することによってこれらの構造体をスタックすることを目的としています。

4

1 に答える 1

2

mystructスタック変数です。つまり、参照で渡すのではなく、でポインタを渡すことになります。

現時点で行ったことは、基本的に次のとおりです。

int f(int i) {
   ...
   i = <any value>;
   ...
}

この場合、値のコピーのみを変更します。

プログラムでは、ポインタのコピーも変更しています。関数の外では、ポインターは変更されません。

変更する場合は、ポインタを渡す必要があります。

location_t * recursive_foo(location_t** loc, maze_t * m){
    int x = (*loc)->x;
    int y = (*loc)->y;
    int dir = (*loc)->dir;
    ...
    *loc = recursive_foo(&temp);
    ...
    return *loc;
}
于 2013-03-24T11:05:57.403 に答える