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!
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!
Imaginando que até aqui esteja certo, como vou alocar Fields[1] visto que cadastrei 2 registros!
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 registros
E 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)