C 动态分配结构数组

C 动态分配结构数组,c,malloc,dynamic-allocation,C,Malloc,Dynamic Allocation,我有一个名为clients的结构,我创建了这个结构数组 typedef struct auxiliarRegistre{ char name[50]; char CPF[20]; char addr[100]; }clients; clients PrimaryClients[100]; 我正在调用一个函数来将数据插入这个数组,但是我想增加可能值的数量,直到它达到极限。 这是正确的方法吗 int *pointer = (clients *) malloc(sizeof(clients)

我有一个名为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
的结果直接分配给缓冲区;如果由于错误而返回NULL,您将丢失对已分配内存的引用,从而导致内存泄漏。另外,在知道调用成功之前,您不想更新数组大小

malloc
调用为一个
client
结构分配空间。您可能还想了解。这可能不是正确的方法,因为您正在强制转换
malloc()
,”的返回值。除此之外,您是否正在寻找
realloc()
?还要注意,您不能将
realloc()
用于
PrimaryClients
,因为它没有分配给
malloc()
。为什么
pointer
的类型是
int*
,它是指向
int
的指针,而不是指向
客户端的指针,
clients*
?如果我使用clients*pointer=malloc(sizeof(clients),我将需要使用pointer->name访问Promary客户端?有趣的是,要访问arr上的字段,我需要使用arr->name,对吗?@MatheusSilva:您将使用
arr[i].name
。下标操作隐式地取消引用
arr
;也就是说,如果
arr
的类型是
client*
,那么
arr[i]
的类型是
client
。可能我有一些错误,它在cliente
*tmp=realloc(client,sizeof(*arrSize+1))之前显示语法错误;
我不知道是什么错误…@MatheusSilva:编译器发出的确切错误消息是什么?请注意,
realloc
调用应写成
realloc(client,sizeof*arr*(arrSize+1))
;检查括号。
clients *tmp = realloc( clients, sizeof *arr * ( arrSize + extent ));
if ( tmp )
{
  arr = tmp;
  arrSize += extent;
}