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

Publicado por André em 23/07/2009

[ Hits: 10.434 ]

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

Brincando com IP no PHP

Waybackmachine: Relembre os velhos tempos

DNS forwarding - um DNS universal

Nmap online

Metasploit Framework no Linux

Leitura recomendada

Script que fecha portas

Cálculo da potência modular de forma eficiente

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