ご教授お願いします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;
}
ダブルポインタがうまく動作しない
Re:ダブルポインタがうまく動作しない
ソースは"pre"タグで字下げしてほしい。
こういうことでしょうか?
#include <stdio.h> #include <stdlib.h> typedef struct{ int x,y,xx,yy; } AA; int sub(AA ***a) { int i; if(!(*a = (AA **)malloc(sizeof(AA *) * 5))) return 0; for (i = 0; i < 5; i ++){ if(!((*a) = (AA *)malloc(sizeof(AA)))) return 0; } return 1; } void freeAA(AA **a) { int i; for(i = 0; i < 5; i ++){ free(a); } free(a); return; } int main(void) { AA **a; if(!sub(&a)) return 1; a[3]->x = 2; a[3]->y = 3; a[3]->xx = 4; a[3]->yy = 5; printf("%d %d %d %d\n", a[3]->x, a[3]->y, a[3]->xx, a[3]->yy); freeAA(a); return 0; }