ダブルポインタがうまく動作しない
Posted: 2007年7月17日(火) 20:04
ご教授お願いしますm(__)m
目的:main関数に空ポインタを作り、それを関数へ引数としてそのアドレスを渡す。
渡されたポインタに5つのポインタ変数を連番でつくり、そこのポインタ変数に構造体の先頭アドレスを
入れる。
アドレスをいれられて戻ってきたmain関数でその構造体の中身を出したり書き換えたりしたい。
というものなのですが、main関数に帰ってきた後、そのデータをいざ使おうとしても中身はぐちゃぐちゃに
なっておりうまくいきません。
何がおかしいかご教授願います。
typedef struct {
int x,y,xx,yy;
} AA;
void sub(AA **a)
{
int i;
*a = (AA *) malloc(sizeof(AA*) * 5);
for (i = 0; i < 5; i++) {
a = (AA*) malloc(sizeof(AA));
memset(a,0,sizeof(AA));
}
}
void main(void)
{
AA *a;
sub(&a);
a[3].x = 2;
}
目的:main関数に空ポインタを作り、それを関数へ引数としてそのアドレスを渡す。
渡されたポインタに5つのポインタ変数を連番でつくり、そこのポインタ変数に構造体の先頭アドレスを
入れる。
アドレスをいれられて戻ってきたmain関数でその構造体の中身を出したり書き換えたりしたい。
というものなのですが、main関数に帰ってきた後、そのデータをいざ使おうとしても中身はぐちゃぐちゃに
なっておりうまくいきません。
何がおかしいかご教授願います。
typedef struct {
int x,y,xx,yy;
} AA;
void sub(AA **a)
{
int i;
*a = (AA *) malloc(sizeof(AA*) * 5);
for (i = 0; i < 5; i++) {
a = (AA*) malloc(sizeof(AA));
memset(a,0,sizeof(AA));
}
}
void main(void)
{
AA *a;
sub(&a);
a[3].x = 2;
}