Jump to content

Problema a integrar estrutura dentro de estrutura


angelicous
 Share

Go to solution Solved by HappyHippyHippo,

Recommended Posts

Boas pessoal, eu tenho um programa que está totalmente funcional com este tipo de estrutura.

struct cliente {
  char nome[9];
  int flag;
  struct cliente* next;
};

typedef struct cliente *ClienteCol[26];

O tipo ClienteCol é um tipo que me define um array de apontadores do tipo struct cliente, que no programa é usado para apontar(cada posição) para um array de estruturas de cliente que aloco na memória, usando esta função:

void initArrayCliente (ClienteCol a, int* r){
  int i=0;
  for(i=0;i<26;i++)
  a[i]= calloc (r[i],sizeof(struct cliente));
}

O r é um array onde eu guardo a dimensão do array para que o apontador está a apontar. Uso-o para me criar a dimensão do array, e no futuro para limitar os acessos(para saber onde acaba). E na main, eu acedo aos dados usando um a[0][0] por exemplo.

Isto funciona sem qualquer tipo de problema. Como o tipo ClienteCol e o array r andam sempre de braços dados, decidi criar esta estrutura:

struct clientestruct {
  int arrayCliente[26];
  ClienteCol colunas;
};
typedef struct clientestruct Clie;

E agora onde eu antes acedia por a[0][0] por exemplo, passei a fazer um b.a[0][0]. O programa compila sem erros, aloca memoria (supostamente). Mas quando vou tentar inserir algo nas posições dá-me sempre um segmentation faul... A minha alocação de memória agora está a ser feita assim:

void initArrayCliente (Clie a){
int i=0;

for(i=0;i<26;i++){
 a.colunas[i]= calloc (a.arrayCliente[i],sizeof(struct cliente));
}
}

Alguém me dá uma pista para tentar despistar o erro? 😛

Edited by angelicous
Link to comment
Share on other sites

  • Solution

Para ver onde esta o erro, adiciona os seguintes printfs

- depois de cada calloc, faz output do endereço de cada bloco alocado

- na funçao onde a funcao initArrayCliente e chamada, depois de chamar essa funcao, faz output dos mesmos ponteiros que fizeste anteriormente.

Agora compara os valores apeesentados

Porque razao e que nao sao iguais?

  • Vote 1
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.