Ir para o conteúdo
TheDark

Segmentation Fault num ifstream.close()

Mensagens Recomendadas

TheDark    0
TheDark

Alguém me consegue explicar porque é que o seguinte código:

int main() {
ifstream fin("transform.in");
int N;
fin >> N;

char *original = new char[N*N], *transformed = new char[N*N];

char *temp = new char[N];

for (int i=0; i<N; ++i) {
	fin >> temp;
	strcpy(original+(N*i), temp);
}

for (int i=0; i<N; ++i) {
	fin >> temp;
	strcpy(transformed+(N*i), temp);
}

cout << "closing fin" << endl;
fin.close();
cout << "fin closed" << endl;
return 0;
}

funciona perfeitamente no Windows, compilado com VC++ 2008, e na USACO e em Linux (compilado com GCC 4.2.1) dá um SIGSEGV na linha do fin.close()? O conteúdo do ficheiro é

6

-@-@-@

@-@-@-

-@-@-@

@-@-@-

-@-@-@

@-@-@-

@-@-@-

-@-@-@

@-@-@-

-@-@-@

@-@-@-

-@-@-@

O Backtrace obtido pelo gdb é o seguinte:

_int_free() from /lib/libc.so.6

free() from /lib/libc.so.6

operator delete() from /usr/lib/libstdc++.so.6

operator delete[]() from /usr/lib/libstdc++.so.6

std::basic_filebuf<...>::_M_destroy_internal_buffer() from /usr/lib/libstdc++.so.6

std::basic_filebuf<...>::close() from /usr/lib/libstdc++.so.6

std::basic_ifstream<...>::close() from /usr/lib/libstdc++.so.6

main() at main.cpp:53

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade