What is the output of the following codes: #include using namespace std; void show(); int main() {show(); return 0;} void show() {int s; s=main(); cout<<s;}?

Just to simply the code for readability I am pasting it here again.

  1. #include  
  2. using namespace std; 
  3. void show(); 
  4.  
  5. int main() { 
  6. show(); 
  7. return 0; 
  8.  
  9. void show() 
  10. int s; 
  11. s = main(); 
  12. cout<

Now this code when executed, would result in an infinite recursion.

The program would start from main(), will call show() which again calls main() and this keeps on repeating indefinitely.

Every time you call a function, some information is pushed onto the memory stack, where the return address is stored so the program knows where to go to when your function completes. Como su llamada a la función nunca se completaría en este caso, la pila sigue creciendo.

La recursividad infinita hace que su pila crezca. Y crezca. Y crezca. Eventualmente crecerá hasta un punto en el que se derramará en un área de memoria a la que su programa tiene prohibido acceder por el sistema operativo. Es entonces cuando se produce el fallo de segmentación.

El fallo de segmentación es una condición que se produce cuando su programa intenta acceder a una ubicación de memoria a la que no se le permite acceder.

Debería obtener resultados similares en todos los sistemas operativos.