2013-08-18 3 views
-1
typedef struct 
{  
    char tenantName[32]; 
    unsigned int IDNum; 
    float rentAmount; 
    unsigned int flatNum; 
    unsigned int Num; 

}database; 

Как динамически изменять массив структуры, а не инициализировать ее статически, как записи базы данных [1000];Как динамически размер массива структуры в C

+3

Вы отметили это с помощью 'malloc()'. Так? (О, и у нас есть VLA в C99 в любом случае.) –

ответ

0

В C вы должны использовать malloc (чтобы получить память), realloc (чтобы получить больше памяти) и бесплатно (чтобы освободить память).

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 
0
database *record = malloc(1000*sizeof(database)); 

Убедитесь, что вы освободить выделенную память после использования.

free(records); 
1

Вы можете использовать calloc(N,SIZE) выделить массив N число элементов каждого с размером SIZE.

В вашем случае это будет выглядеть следующим образом:

базы данных * записи = calloc (numdatabases, SizeOf (* записей));

Что касается изменения размера массива, вы можете использовать realloc(PTR,SIZE), который будет иметь размер ранее выделенного пространства, на который указывает PTR, до размера SIZE.

В вашем случае вы можете сжать массив так:

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

Кстати в обоих кодов вместо того, чтобы SizeOf (* записей) можно положить SizeOf (база данных) и являются действительными.