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

TheDark

Segmentation Fault num ifstream.close()

3 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema está logo no que fazes dentro do primeiro for, mas não sei exactamente onde.

Edit: é nos strcpy.

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