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

256mxr

Qual é o erro???

7 mensagens neste tópico

#include <iostream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;

int main(int argc, char *argv[])
{
string tempo;
tempo=argv[1];

ifstream fich(argv[2]);
if(!fich)
	cerr << "Erro ao abrir ficheiro!\n";

vector <string> dias;
string linha;
        
int it=0;
while(getline(fich,linha))
	{

		dias.push_back(linha);
		if(linha==tempo)
			cout << dias[it-1] << '\n';
		else
			continue;
		it++;
	}
}


O erro k da é segmentation fault...

N tou a ver onde isto n funciona???

Ajudem por favor...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estas a controlar os dados passados pela linha de comandos? É que pode ser disso...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

quando executo o programa escrevo "tempo sol tempo.txt"

tempo é o nome do programa

sol é o argv[1]

tempo.txt é o argv[2]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

1. O construtor ifstream retorna sempre valor, o if não faz nada. Tens de usar ios::fail()

2. Ao usar o construtor dessa forma em vez de teres também ifstream::open(), facilmente se pode esquecer do ifstream::close(), tal como aconteceu aqui.

3. É desnecessário o else continue;

4. dias[it-1] pode eventualmente estar a aceder a dias[0-1], que não é válido.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema está na linha

cout << dias[it-1] << '\n';

pois na primeira iteração do while tenta-se aceder ao valor dias[-1], o que é uma posição de memória inválida e daí resultar o segmentation fault. Basta alterares o valor do inteiro it para que comece com o valor 1.

Devias igualmente seguir os conselhos do shummy e controlar melhor a estrutura que recebe os dados, como por exemplo, definir um tamanho máximo para o número de elementos do vector e o tamanho máximo das strings. Para além disso, devias também controlar a forma como um utilizador passa os parâmetros para o teu programa: o que é suposto acontecer se o número de parâmetros for diferente do correcto?

Continua com o bom trabalho  O0

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok vou fazer isso a partir d agora...

obrigado pelos conselhos

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