mallocのスコープ

訂正の文章を末文に書いてます。すみませんおかしいので最終末文見てください。

こんなプログラムを作成しました。
mallocのスコープをテストしてみました。


#include
#include
#include

typedef struct param{
int id;
char cd[2+1];
} param;

param *test(param* p){
p=(param*)malloc(sizeof(struct param)*3);
p[0].id=10;

strcpy(p[0].cd ,"11");
printf("func p:%d\n",p[0].id);
printf("func p:%s\n",p[0].cd);

return p;
}

int main(int argc, char *argv[]) {
param *p1,*p2;

p1=NULL;
p2=NULL;

p2=test(p1);

if (p1 != NULL) {
printf("p1:%d\n",p1[0].id);
printf("p1:%s\n",p1[0].cd);
}else{
printf("p1:NULL\n");
}

if (p2 != NULL) {
printf("p2:%d\n",p2[0].id);
printf("p2:%s\n",p2[0].cd);
}else{
printf("p2:NULL\n");
}

return 0;
}

結果がこうなるって知ってました?


func p:10
func p:11
p1:NULL
p2:10
p2:11

引数での値渡しはできないんですね。

Mac(XCode) WinXP(VS2008)で確認しました。

Sickly Life はてな
http://d.hatena.ne.jp/itiri/20111120/1321780179


ここの方に、ぼろくそ書かれたのですが、間違ってました。

もう少し和らいで書いていただきたかったなぁ。。。。(^^;
つか、コメントに間違ってますよぐらい書いていただければ。。。。
私わかってなかったんで。。。

構造体の配列でしたよねぇ。ポインタのポインタにしなきゃならないですよね。
あははは。つうことで、すみませんでした

うーん。ちゃんと勉強しなければ。。。。だからまともに作れないときあるんだな。。。。orz