gpt4 book ai didi

c - 动态分配结构数组

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:13 25 4
gpt4 key购买 nike

我有一个名为 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,您将失去对已分配内存的引用,从而导致内存泄漏。此外,在知道调用成功之前,您不想更新数组大小。

关于c - 动态分配结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19636125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com