Enviado em 26/01/2023 - 22:17h
Boa Noite a todos,
Preciso de uma struct onde seus campos internos sejam alocados dinâmicamente e a qtd de registro dela também seja alocada dinâmicamente.
E minha dúvida é não fazer idéia de como é possível implementar isso! Apenas acredito que seja possível fazer isso com malloc.
Abaixo uma idéia do tamanho que preciso dos campos, lembrando que eles podem variar para mais que isso! E muitos usam muito menos que isso!
Lembrando que como mostro nos registros acima, cada registro terá valores de campos diferentes que podem ser 1 byte ou 100 mil bytes
No lugar dos números entrará uma variavel int com a qtd de bytes necessárias para alocação, tipo malloc(bytes)
Seria algo assim?
Alguém consegue me ajudar em como uso malloc pra fazer isso? Porque estou completamente confuso!
Pode ser um exemplo de 2 registros, mostrei 6 pq usarei 6. Minha dúvida principal é como alocar a struct contendo tudo nela! Ao cadastrar 1 registro. Não sei se é alocado separado como mostrei acima ou se é apenas 1 comando que aloca tudo!
Foquei no malloc, pq é a primeira coisa a se fazer, sei que no 2º registro terei que usar realloc, mas ai é mais fácil após saber como cadastrar o primeiro, apenas lembrando que cada registro tem um tamanho diferente, se isso é possível alocar!
Acho que também entendi que minha struct é um vetor de vetores de ponteiros de char (Uma matriz com 1 linha e 6 colunas)
Preciso de uma struct onde seus campos internos sejam alocados dinâmicamente e a qtd de registro dela também seja alocada dinâmicamente.
E minha dúvida é não fazer idéia de como é possível implementar isso! Apenas acredito que seja possível fazer isso com malloc.
Abaixo uma idéia do tamanho que preciso dos campos, lembrando que eles podem variar para mais que isso! E muitos usam muito menos que isso!
struct {
char
Field1[ 20],
Field2[ 20],
Field3[ 1001],
Field4[ 1001],
Field5[ 1001],
Field6[30000];
} Fields[50000]; Penso que a struct precisa ser declarada como um ponteiro, mas não sei fazer isso direito!struct {
char
*Field1,
*Field2,
*Field3,
*Field4,
*Field5,
*Field6;
} *Fields; // Seria assim aqui??? Ao cadastrar, na hora de salvar cada registro imagino que eu aloco o que preciso para cada campo, na forma abaixo, os campos estão no tamanho do registro!REGISTRO I - 15350 bytesImaginando que até aqui esteja certo, como vou alocar Fields[1] visto que cadastrei 2 registros!
Field1 = malloc(20);
Field2 = malloc(20);
Field3 = malloc(100);
Field4 = malloc(80);
Field5 = malloc(130);
Field6 = malloc(15000);
REGISTRO II - 3320 bytes
Field1 = malloc(20);
Field2 = malloc(20);
Field3 = malloc(50);
Field4 = malloc(30);
Field5 = malloc(200);
Field6 = malloc(3000);
Lembrando que como mostro nos registros acima, cada registro terá valores de campos diferentes que podem ser 1 byte ou 100 mil bytes
No lugar dos números entrará uma variavel int com a qtd de bytes necessárias para alocação, tipo malloc(bytes)
Seria algo assim?
Fields = malloc(18670); // Soma de bytes dos 2 registrosE como Fields se tornaria Fields[1] ? Ou seja 2 registros na struct?
Alguém consegue me ajudar em como uso malloc pra fazer isso? Porque estou completamente confuso!
Pode ser um exemplo de 2 registros, mostrei 6 pq usarei 6. Minha dúvida principal é como alocar a struct contendo tudo nela! Ao cadastrar 1 registro. Não sei se é alocado separado como mostrei acima ou se é apenas 1 comando que aloca tudo!
Foquei no malloc, pq é a primeira coisa a se fazer, sei que no 2º registro terei que usar realloc, mas ai é mais fácil após saber como cadastrar o primeiro, apenas lembrando que cada registro tem um tamanho diferente, se isso é possível alocar!
Acho que também entendi que minha struct é um vetor de vetores de ponteiros de char (Uma matriz com 1 linha e 6 colunas)
char *Fields[0][6]; // Uma linha com 6 campos (6 ponteiros de char)