return main(); (fatal) - C++

Publicado por André em 23/07/2009

[ Hits: 10.464 ]

Blog: http://127.0.0.1

 


return main(); (fatal) - C++



Bom, vou mostrar para vocês um erro fatal em programação em C++: a função return main().

Primeiro vou criar um código como exemplo:

#include <iostream>
#include <windows.h>

using namespace std;

int main {
   system("pause");
   cout<<"Viva o Linux"<<endl;
   system("pause");
   system("cls");
   return main();
}

Esse código simplesmente exibe a mensagem "Viva o Linux" repetitivamente. Pois vamos lá, no começo do código criamos a variável "main".

Aí colocamos os comandos entre as chaves e no final colocamos "return main();".

Ou seja, ele voltará para o comando int main, toda vez que ele voltar criará outro main, e outro, e outro e outro...

E adivinhem o que acontece? Acaba com sua memória.

Outras dicas deste autor

Ganglia - Uma ótima ferramenta para gerência de desempenho

Centralizar JFrame utilizando o NetBeans

Compilando com o javac

Rodando diversos formatos de vídeo sem problemas em seu Debian

Instalando flashplayer no Linux

Leitura recomendada

Cálculo da potência modular de forma eficiente

Script que fecha portas

Encontrando erros em C/C++ com Cppcheck

Biometria facial no login do GDM

Encontrando erros em C/C++ com Valgrind

  

Comentários
[1] Comentário enviado por andrezc em 28/08/2009 - 19:16h

Só me desculpem pelo windows.h e pelo system("pause"); eu fiz o código em um ambiente Windows.

[2] Comentário enviado por gedarius em 08/03/2010 - 13:06h

Não entendi... não manjo de C++, porém se vc fizer um "for" ele não vai chamar a função main varias vezes... e outra, acho que é só vc utilizar um "return 0" que é melhor não?

bom, de qqr maneira, se vc diz que é fatal, qual a alternativa???

[3] Comentário enviado por danltmz em 20/03/2010 - 15:10h

gedarius.. não se deve usar 'return main()'. Sintaticamente está correto, mas isso causa uma chamada recursiva eterna. Caso você não saiba o que seja recursividade, é o ato de uma função chamar a si mesma, dentro do seu corpo.
no caso da função main, sim, deve-se usar 'return 0' (pelo menos eu tenho isso como padrão) e apenas em caso de erro, usar a função 'exit()' informando um valor de retorno que indique o erro(qualquer valor de retorno diferente de 0 é considerado erro).



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts