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

Publicado por André em 23/07/2009

[ Hits: 10.802 ]

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

Gerenciando a inicialização de programas em seu Linux com facilidade

APIs de criptografia em Java

Derrubando Linux em 10 segundos

Metasploit Framework no Linux

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

Leitura recomendada

Script que fecha portas

Encontrando erros em C/C++ com Valgrind

Encontrando erros em C/C++ com Cppcheck

Biometria facial no login do GDM

Cálculo da potência modular de forma eficiente

  

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