========================
0:d0=33 d1=33 d2=33 d3=33 p=00000021
0:d0=19 d1=19 d2=19 d3=19 p=00000013
0:d0=19 d1=19 d2=19 d3=19 p=00000013
========================
1:d0=33 d1=33 d2=33 d3=33 p=00000021
1:d0=19 d1=19 d2=19 d3=19 p=00000013
1:d0=19 d1=19 d2=19 d3=19 p=00000013
と表示したところで終了してしまい最後まで実行してくれません。
その理由が知りたいです。
動的に構造体配列をとり、それを関数に渡してその関数の中で構造体の中身を書き換え、戻したいです。また、戻したときには書き換えた値は反映していてほしいです。下記プログラムはfuncで中身を書き換えmainに戻しています。それとfreeのやり方はこれで正しいでしょうか?よろしくお願いします。
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
typedef struct{
int d0;
int d1;
int d2;
int d3;
}data_t;
data_t func(data_t* pData,int i){
pData[i].d0 = 19;
pData[i].d1 = 19;
pData[i].d2 = 19;
pData[i].d3 = 19;
printf("%d:d0=%d d1=%d d2=%d d3=%d p=%p\n",i, pData[i].d0, pData[i].d1, pData[i].d2, pData[i].d3, pData[i]);
return *pData;
}
int main(){
data_t* pData;
for(int i=0;i<10;i++){
pData = (data_t*)malloc(sizeof(data_t));
pData[i].d0 = 33;
pData[i].d1 = 33;
pData[i].d2 = 33;
pData[i].d3 = 33;
printf("========================\n");
printf("%d:d0=%d d1=%d d2=%d d3=%d p=%p\n",i, pData[i].d0, pData[i].d1, pData[i].d2, pData[i].d3, pData[i]);
*pData = func(pData,i);
printf("%d:d0=%d d1=%d d2=%d d3=%d p=%p\n",i, pData[i].d0, pData[i].d1, pData[i].d2, pData[i].d3, pData[i]);
}
printf("========================\n");
printf("========================\n");
for(int j=0;j<10;j++){
printf("d0=%d d1=%d d2=%d d3=%d p=%p\n", pData[j].d0, pData[j].d1, pData[j].d2, pData[j].d3, pData[j]);
}
free(pData);
return 0;
}