2016-11-06 10 views
0

は、私は次の構造体と(のtypedef .Hと.Cからsnake_init()から取られた)それを初期化する機能を持っています。 C(のみint main()示す):間接参照場合異なる値

int main(int argc, char *argv[]) { 
    Snake *s = snake_init(12, 1234); 
    // 12 1234 
    printf("*x: %d *y: %d\n", *(s->x), *(s->y)); 
    // 12 1234 
    printf("*head_x: %d *head_y: %d\n", *(s->head_x), *(s->head_y)); 
    // 1 1 
    printf("x == head_x: %d y == head_y: %d", s->x == s->head_x, s->y == s->head_y); 
    return 0; 
} 

は、それらが同じアドレスを指す場合でも、s->ys->head_yは異なる値を有します。 s->xおよびs->head_xにはこの問題はありません。上記のコードで何が問題になっていますか? snake_init()s->xs->yの初期化と関係がありますか? 「蛇」の後にint型にアクセスするために

+2

ような何かを行うことは、私は私がメモリを割り当てられてきたと信じて割り当てられていないメモリへのs> yでのポインティングとは何か – Tibrogargan

+0

を持っているかもしれません2 * sizeof(int)を指定すると、s-> xとs-> yの両方に対してです。これはそれを行う方法ではありませんか? – GreatHam

+1

's + 2'は未定義の振る舞いを引き起こします –

答えて

0
+-------+---+---+ 
| snake | x | y | 
+-------+---+---+ 
s  s+1 

この

int* x = (int *)(s+1); 
int* y = (int *)(s+1) + 1; 

s->x = x; 
s->y = y;