2

私はこのようなことをしようとしています

typedef struct _thingy_t
{
    int num;
} thingy_t;

void go(int idk)
{
    // normally I could just do
    thingy_t* ary[idk];
    // but I need the array to be global    
}

サイズの構造体へのポインターの配列が必要ですidk

関数の外で宣言された「ダブルポインタ」を使用するのが最善の方法ですか? また、構造体の malloc スペースについてはどうでしょうか。

4

1 に答える 1

3

グローバルとして宣言してから、関数内でメモリを割り当てることができます。

配列にメモリを割り当てたい場合。

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 で割り当てられるメモリを忘れないでください。

于 2013-10-22T05:11:29.193 に答える