Fila em C++ (problema).

1. Fila em C++ (problema).

Hugo Sousa
goj1

(usa Debian)

Enviado em 11/04/2011 - 13:44h

Olá galera.

Fiz a fila abaixo, mas ela não insere, não retira e não imprime. Compila normalmente.

Na execução ocorre uma mensagem de falha de segmentação:

Segmentation fault

O fonte da fila:

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#define TAMANHO 10

class minhaFila{
private:
int inicioFila, fimFila, f[TAMANHO];

public:
void inicializaFila(){
for(int i=0; i<TAMANHO; i++){
f[i]=0;
}
inicioFila=fimFila=-1;
}

void insere(int elemento){
if(fimFila!=TAMANHO){
fimFila++;
f[fimFila]=elemento;
}
}

void retira(){
if(inicioFila!=fimFila){
int elementoRetirado;
inicioFila++;
elementoRetirado=f[inicioFila];
f[inicioFila]=0;
//return elementoRetirado;
//printf("O elemento retirado foi %d: ",&elementoRetirado);
}

else {printf("A fila está vazia!");}
}

void imprimeFila(){
for(int i=TAMANHO; i<=f[fimFila]; i--){
printf("%d\n",f[i]);
}
}
};

int main(){
minhaFila f1;
int insereElemento,op;

//f1.inicioFila();

printf("\n1- Inicializar fila \n2- Para inserir \n3- Para retirar \n4- Mostrar fila \n5- Sair\n\n");
scanf("%d",&op);

switch(op){
case 1:
f1.inicializaFila();
break;
case 2:
printf("Digite um número inteiro: ");
scanf("%u",&insereElemento);
f1.insere(insereElemento);
//return main();
break;
case 3:
f1.retira();
//return main();
break;
case 4:
f1.imprimeFila();
//return 0;
break;
}

system("PAUSE");
return 0;
}


  


2. Re: Fila em C++ (problema).

Ramon
RamonMedeiros

(usa Ubuntu)

Enviado em 11/04/2011 - 14:54h

Falhas de segmentação geralmente ocorrem por apontar para um espaço inexistente na memória (vulgo NullPointerException em Java).




3. Re: Fila em C++ (problema).

Elder Marco
eldermarco

(usa Fedora)

Enviado em 12/04/2011 - 00:02h

Exatamente o que o nosso amigo acima disse. Quanto vale fimFila, inicioFila quando as funções que o utilizam tentam testá-la pela primeira vez? Aparentemente, o erro pode estar aí, visto que não contém nada nessas variáveis logo de início.