グローバルとして宣言してから、関数内でメモリを割り当てることができます。
配列にメモリを割り当てたい場合。
void go(int);
thingy_t *data=NULL;
main()
{
//read idk value.
go(idk);
}
void go(int idk)
{
data = malloc(idk * sizeof(thingy_t) );
// when you allocate memory with the help of malloc , That will have scope even after finishing the function.
}
ポインターの配列にメモリを割り当てたい場合。
thingy_t **data=NULL;
int main()
{
int i,idk=10;
go(idk);
for(i=0;i<10;i++)
{
data[i]->num=i;
printf("%d ",data[i]->num );
}
return 0;
}
void go(int idk)
{
int i=0;
data=malloc(idk *sizeof( thingy_t * ));
for ( i = 0; i<idk ; i++) {
data[i]=malloc(sizeof( thingy_t));
}
}
free()
malloc で割り当てられるメモリを忘れないでください。