Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [c] ricorsione mutua

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258

    [c] ricorsione mutua

    ho fatto questo programma che richiama il main infinite volte, credo che lo stack sia riempito da una lunga fila di chiamate che non si chiudono, ma non si esaurisce la memoria. voi cosa ne pensate?

    codice:
    #include <stdio.h>
    
    void s();
    
    int main()
    {
      printf("Luca\n");
      s();
      getch();
      return 0;
    }
    
    void s(){
      main();
    }

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    a me dopo 6231 volte finisce la memoria e va in Stack Overflow
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    che bello...beato te che ti va in stack overflow..a me niente
    cioè qualcosa l'ho ottenuto anche io...oltre un milione di cicli si apre la finestra con scritto "creazione del registro errori in corso", intanto se segui il task manager l'occupazione di memoria aumenta.

    Ma per curiosità quanta memoria hai di ram? pero sembra differente la situazione in cui finiamo, a me sembra che si esaurisca dopo alcuni min la memoria consentita...come l'hai fatto il prog per la verifica?
    io cosi:

    codice:
    #include <stdio.h>
    
    void s();
    
    int cont=0;
    
    int main()
    {
      
      printf("%d\n", cont++);
      s();
      getch();
      return 0;
    }
    
    void s(){
      main();
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    sono riuscito a far esaurire la memoria! ma questa è ancora un altra cosa..io credo che a me la finestrella si apra perchè esco fuori dal range dell'int...strano che a me non dia lo stack overflow

    codice:
    #include <stdio.h>
    
    void s();
    
    int cont=0;
    
    int main()
    {
      
      printf("%d\n", cont++);
      malloc(5000);
      s();
      getch();
      return 0;
    }
    
    void s(){
      main();
    }

  5. #5
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Originariamente inviato da Lucked
    che bello...beato te che ti va in stack overflow..a me niente
    cioè qualcosa l'ho ottenuto anche io...oltre un milione di cicli si apre la finestra con scritto "creazione del registro errori in corso", intanto se segui il task manager l'occupazione di memoria aumenta.

    Ma per curiosità quanta memoria hai di ram? pero sembra differente la situazione in cui finiamo, a me sembra che si esaurisca dopo alcuni min la memoria consentita...come l'hai fatto il prog per la verifica?
    io cosi:

    codice:
    #include <stdio.h>
    
    void s();
    
    int cont=0;
    
    int main()
    {
      
      printf("%d\n", cont++);
      s();
      getch();
      return 0;
    }
    
    void s(){
      main();
    }
    Io ho fatto cosi:

    codice:
    #include <stdio.h>
    
    void s();
    
    int cont=1;
    
    int main()
    {
      printf("%d\n", cont);
    cont++;
      s();
      getch();
      return 0;
    }
    
    void s(){
      main();
    }
    Direi che cambia poco... cmq la mia ram è di 128, ma tengo 9 o 10 programmi in background(tra cui Norton...) come minimo.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    Scusa, ma sei sicuro che ti scrive proprio stack overflow?

  7. #7
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Originariamente inviato da Lucked
    Scusa, ma sei sicuro che ti scrive proprio stack overflow?
    Si sicuro, anche facendo il debug del programma viene scritto "Stack Overflow".

    Cmq, dopo la chiamata a s(), che richiama main(), il return viene efettuato?

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    No, non viene effettuato, infatti il chiamante di s che chiama main è a metà programma...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.