thiagoescarrone Postado Novembro 23, 2018 em 21:42 Compartilhar Postado Novembro 23, 2018 em 21:42 Olá, estou tendo problemas com esse código. Eu tenho que inserir um dado em uma Fila, na qual eu tenho um ponteiro para um vetor de structs. Eu tenho um limite de elementos na qual cada fila pode ter(MAX_CLIENTES(definida como 50)). O problema que estou enfrentando é que de alguma maneira algumas vezes ele não insere pois a fila está cheia e outras vezes insere normalmente.Segue o código. Quem puder me dar alguma dica de onde posso estar errando, acredito que seja na alocação de memória. #include <stdio.h> #include <stdlib.h> #include<time.h> #define MAX_CLIENTES 50 #define MAX_CAIXAS 20 typedef struct node{ int numItems; struct node* next; }nodo; typedef struct fila{ int tamanho; nodo* inicio; nodo* fim; }Fila; Fila* criaFila(){ Fila* nova_fila = (Fila*) malloc(sizeof(Fila)); nova_fila->tamanho = 0; nova_fila->inicio = NULL; nova_fila->fim = NULL; return nova_fila; } int vazia(Fila* fila){ return (fila->fim == NULL); } nodo* ins_fim (nodo* fim, int v){ nodo* p = (nodo*) malloc(sizeof(nodo)); p->numItems = v; p->next = NULL; if (fim != NULL) /* verifica se lista não estava vazia */ fim->next = p; return p; } void insere (Fila** f, int v, int i){ if(f[i]->tamanho < MAX_CLIENTES){ f[i]->fim = ins_fim(f[i]->fim,v); if (f[i]->inicio==NULL) /* fila antes vazia? */ f[i]->inicio = f[i]->fim; f[i]->tamanho++; }else{ printf("filha cheia\n"); } } //=========== nodo* ret_ini(nodo* inicio){ nodo* p = inicio->next; free(inicio); return p; } int main(void){ Fila* fila[MAX_CAIXAS]; do{ printf("Quantos caixas deseja criar? \n"); scanf("%d",&quant); }while(quant > MAX_CAIXAS || quant <= 0); for(i = 0; i < quant; i++){ fila[i+1] = criaFila(); } insere(fila, 5,0); } Desde já agradeço. Link para o comentário Compartilhar em outros sites More sharing options...
thiagoescarrone Postado Novembro 24, 2018 em 00:00 Autor Compartilhar Postado Novembro 24, 2018 em 00:00 Descobri onde está o problema. É no tamanho da fila, na 1ual está pegando lixo de memória ao invés de pegar o valor zero, na qual eu achei que estava pegando. Link para o comentário Compartilhar em outros sites More sharing options...
fredericopissarra Postado Novembro 24, 2018 em 12:50 Compartilhar Postado Novembro 24, 2018 em 12:50 Procure: "Algorithms in C" de Robert Sedgewick Link para o comentário Compartilhar em outros sites More sharing options...
thiagoescarrone Postado Novembro 24, 2018 em 13:13 Autor Compartilhar Postado Novembro 24, 2018 em 13:13 Obrigado pela indicação fredericopisarra, com certeza vou procurar esse livro. Problema resolvido, o problema de lixo de memória estava apenas na primeira posição do meu vetor. Causado pelo metodo de criação da minha fila, na qual ele pulava a posição zero(fila+1). Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados
Arquivado
Este tópico foi arquivado e está fechado para novas respostas.