C 动态分配结构数组
我有一个名为clients的结构,我创建了这个结构数组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)
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;
}