-1
typedef struct
{    
    char tenantName[32];
    unsigned int IDNum;
    float rentAmount;
    unsigned int flatNum;
    unsigned int Num;

}database;

データベース レコード [1000] のように静的に初期化するのではなく、構造体の配列のサイズを動的に変更するにはどうすればよいですか。

4

3 に答える 3

1

calloc(N,SIZE)を使用して、それぞれサイズが SIZE の N 個の要素の配列を割り当てることができます。

あなたの場合、次のようになります。

データベース *records = calloc(numdatabases,sizeof(*records));

配列のサイズ変更に関しては、 realloc(PTR,SIZE)を使用できます。これは、PTR が指す以前に割り当てられたスペースのサイズを SIZE のサイズに変更します。

あなたの場合、次のように配列を縮小できます。

database *shrinkedrecords = realloc(records,NEWNUMBEROFARRAYS * sizeof(*records))

ちなみに、sizeof(*records) を入れる代わりに両方のコードで sizeof(database) を入れることができます。どちらも有効です。

于 2013-08-18T15:55:29.427 に答える
0
database *record = malloc(1000*sizeof(database));

使用後は、割り当てられたメモリを必ず解放してください。

free(records);
于 2013-08-18T14:50:12.323 に答える
0

C では、malloc (メモリを取得するため)、realloc (より多くのメモリを取得するため)、および free (メモリを解放するため) を使用します。

dataType *ptr = malloc(sizeof(dataType)); //one record memory allocated

ptr = realloc(ptr, newSize);  //increases the size of the memory allocated

free(ptr); //releases all the memory
于 2013-08-18T14:25:39.597 に答える