Sota Posted November 23, 2009 at 11:22 PM Report Share #297359 Posted November 23, 2009 at 11:22 PM void Le_fich(struct PLANO *Plan){ FILE *file; int i,j=0,exit=0, n_estacoes,n_pecas,estacao; char modo; struct PLANO *Planos; Planos =(PLANO*) calloc(1, sizeof(struct PLANO)); file=fopen("planotrabalho.txt","r"); while(exit==0){ j++; if (fscanf(file,"%d %d ",&n_estacoes, &n_pecas)!=EOF){ printf("Plano: %d---------------------------------------\n",j); // printf("Numero de estacoes: %d\nnumero de pecas: %d\n",n_estacoes,n_pecas); Planos =(PLANO*) realloc(Planos, j); (Planos+(j-1))->n_estacoes=n_estacoes; (Planos+(j-1))->n_pecas=n_pecas; (Planos+(j-1))->estacoes= (int *) calloc(n_estacoes+1,sizeof(int)); (Planos+(j-1))->modo= (char *) calloc(n_estacoes+1,sizeof(char)); printf("Numero de estacoes: %d\nnumero de pecas: %d\n",(Planos+(j-1))->n_estacoes,(Planos+(j-1))->n_pecas); } else exit=1; for (i=0;i<n_estacoes;i++){ if(fscanf(file,"%d %c ", &estacao, &modo)!=EOF){ //printf("Estacao numero %d modo %c\n",estacao,modo); (Planos+(j-1))->estacoes[i]=estacao; (Planos+(j-1))->modo[i]=modo ; printf("Estacao numero %d modo %c\n",(Planos+(j-1))->estacoes[i],(Planos+(j-1))->modo[i]); } else exit=1; } }; Plan = Planos; fclose(file); } Noutro .c faço: void EscolherPlano(){ struct PLANO *Plano; int c; Le_fich(Plano); printf("Escolha o numero do plano:\n"); scanf("%d",&c); printf("numero de estacoes: %d \n",(Plano+(c-1))->n_estacoes); } Tou a fazer bem?? é que o programa arrebenta no printf final ? Link to comment Share on other sites More sharing options...
Sota Posted November 23, 2009 at 11:51 PM Author Report Share #297361 Posted November 23, 2009 at 11:51 PM Resolvi com um return. Mas não e suposto fucionar a mesma?? ou é so em linux?? Link to comment Share on other sites More sharing options...
_7_up_ Posted November 24, 2009 at 12:06 AM Report Share #297363 Posted November 24, 2009 at 12:06 AM Se rebentava num printf há algo que n deve estar resolvido por causa de um return... penso eu de que... Corre o valgrind e vê o q t diz... Já agora isso tá um bocado confuso, e essa notação ponteiriça tb n ajuda muito... podias sempre escrever Planos[j-1].n_estacoes=n_estacoes; em vez de (Planos+(j-1))->n_estacoes=n_estacoes; e também acho q n é muito feliz andar em todo o lado com j-1, quando podes incrementar o j no final do ciclo while ou começar em 1 em vez de 0... mas se funciona siga q é quase natal Link to comment Share on other sites More sharing options...
Baderous Posted November 24, 2009 at 01:23 AM Report Share #297372 Posted November 24, 2009 at 01:23 AM Esses estouros nos printfs com apontadores, normalmente, quer dizer que o endereço de memória que estás a buscar está a NULL ou não tens permissões para lá aceder. Link to comment Share on other sites More sharing options...
Sota Posted November 24, 2009 at 01:38 AM Author Report Share #297373 Posted November 24, 2009 at 01:38 AM Pelo que percebi os estouros era porque quando ia fazer o printf não tinha conseguido passar o valor da variavel. assim que fiz o return funcionou tudo as mil maravilhas Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now