• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

so_simple

Structs dinamicos com elementos dinamicos - URGENTE

7 mensagens neste tópico

Epah estou com uma duvida e problema muito urgente!

Eu tenho uma struct

typedef struct{
char nome[100];
int ano;
int n_freq;
char *desc_aval;
float *crit_class;
float *class_freq;
int estado;/*0 - ñ inscrito; 1 - inscrito; 2 - concluido 3 - nao concluido*/
float class_final;
}unidade;

depois faco a alocação de um array de structs dependendo do numero de dados que o user quer introduzir.

E isto passa-se o mesmo dentro da struct. Ao pedir o n_freq(numero de frequencias) quero fazer a alocaçao de um array com as notas de cada freq e outro com criterio de avaliacao para cada freq!

O problema é que em cada posicao do array de structs, vai ficar uma struct com variaveis de tamanhos diferentes. Isto tem problemas a escrever e a ler em ficheiros?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não estou a ver muito bem a duvida!!

Alocas espaço para esses dados e colocas os ponteiro em desc_aval e crit_class, certo?

Todas as instâncias de "struct unidade" tem sempre o mesmo tamanho, que é definido na propria definição da struct.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isto tem problemas a escrever e a ler em ficheiros?

tem. para escreveres e ler em ficheiros facilmente é conveniente que todos os "blocos" tenham o mesmo tamanho.

(é claro que depende da forma como estás a pensar armazenar os ficheiros, estou a assumir que usas o formato binário).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

vou tentar explicar melhor!

tens um struct com vars la dentro...

algumas dessas vars são ponteiros que servem para apontar para arrays.

imagina que o user tem uma unidade com n_freq=2. o que vai acontecer é alocar 2 arrays: crit_class[2]; e class_freq[2]; usando o malloc claro (ex: crit_class=(float*)malloc(n_freq*sizeof(float));) e escreve no ficheiro.

A seguir o user insere outra unidade so que com n_freq=4 e o que vai acontecer é alocar 2 arrays: crit_class[4]; e class_freq[4]; usando o malloc claro (ex: crit_class=(float*)malloc(n_freq*sizeof(float)):P e escreve no ficheiro.

Portanto escrevi 2as structs que tem vars com "tamanhos" diferentes

Depois ao ler o ficheiro quero ler todos os registos para um array de uma struct do tipo unidade. ao alocar este array( uptr=(unidade*)malloc(n_registos*sizeof(unidade))) estou a dizer que todas as posicoes do array tem o mesmo tamanho ou sizeof();

O que vai acontecer e que vou ler structs do ficheiro todas com tamanhos diferentes! isto é possivel? ou tenho de fixar o tamanho das vars da struct??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A estrutura é sempre do mesmo tamanho. Os ponteiros não mudam de tamanho.

Estão é a apontar para um array maior, mas isso não vai alterar o tamanho das instâncias de unidade.

Ao escrever para o ficheiro, tens de escrever os dados da unidade, e o conteudo de cada array. Não vaz escrever os ponteiros porque isso não tem qualquer significano no ficheiro.

Quando leres tens de criar cada array para cada estrutura como fizeste para escrever.

Ou seja a unidade mantêm-se com tamanho constante, mas tem apontadores para arrays de tamanho variavel.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ah ok! ja percebi a minha duvida! thanks

Quer dizer que vou ter de usar apontadores de apontadores...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora