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. Comme votre appel de fonction ne se terminerait jamais dans ce cas, la pile continue de croître.

La récursivité infinie fait que votre pile grandit. Et croît. Et croît. Finalement, elle grandira jusqu'à un point où elle débordera sur une zone de mémoire à laquelle votre programme est interdit d'accès par le système d'exploitation. C'est à ce moment-là que vous obtiendrez la faute de segmentation.

La faute de segmentation est une condition dans laquelle votre programme tente d'accéder à un emplacement de mémoire auquel il n'est pas autorisé à accéder.

Vous devriez obtenir des résultats similaires dans tous les OS.

.