我有一个名为 clients 的结构,我创建了这个结构数组。
typedef struct auxiliarRegistre{
char name[50];
char CPF[20];
char addr[100];
}clients;
clients PrimaryClients[100];
我正在调用一个函数将数据插入到此数组中,但我想增加可能值的数量,直到达到限制。这是正确的方法吗?
int *pointer = (clients *) malloc(sizeof(clients));
下面是一个例子:
#include <stdlib.h>
typedef struct auxiliarRegistre { ... } clients;
int arrSize = SOME_START_SIZE;
clients *arr = malloc( arrSize * sizeof *arr );
/**
* Do stuff with arr. When you need to extend the buffer, do the following:
*/
clients *tmp = realloc( clients, sizeof *arr * ( arrSize * 2));
if ( tmp )
{
arr = tmp;
arrSize *= 2;
}
每次需要扩展缓冲区时,将缓冲区的大小加倍是一种常见的策略;这往往会最大限度地减少对realloc
的调用次数。 它还可能导致严重的内部分裂;如果您有 128 个元素,并且只需要再存储一个元素,则最终总共分配了 256 个元素。 您还可以按固定金额扩展,例如
clients *tmp = realloc( clients, sizeof *arr * ( arrSize + extent ));
if ( tmp )
{
arr = tmp;
arrSize += extent;
}
请注意,您不希望将realloc
的结果直接分配给缓冲区;如果它由于错误而返回 NULL,您将丢失对已分配内存的引用,从而导致内存泄漏。 此外,在知道调用成功之前,您不希望更新数组大小。