ご教授お願いします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;
}