Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Procedure e funzioni in C

    Volevo sapere cosa fa questo programma (in dettaglio) e perchè ad un certo punto quando è in esecuzione, o esce da solo, o mi da errore(stack overflow).
    codice:
    #include <stdio.h>
    
    int main(){
       printf("CIAO\n");
    return main();
    }
    Main si ripete ciclicamente fino ad un certo punto, perchè? il return non dovrebbe assegnare al nome della funzione il valore di ritorno? in questo caso cosa fa?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    main() viene richiamata ricorsivamente all'infinito dato che non c'è alcun caso base che termini la ricorsione; è per questo che ad un certo punto ti viene la segnalazione di "stack overflow"...
    every day above ground is a good one

  3. #3
    mmm, ok. Ma il return non dovrebbe solo assegnare un valore ad il nome della funzione? Come fa a far ripetere main?Quando io faccio un programma che va in loop infinito, continua ad andare, perchè questo no?

  4. #4
    Codice PHP:
    #include <stdio.h>

    int main(){
       
    printf("CIAO\n");
    return 
    main();

    restituisce al chiamante il valore restituito dall'invocazione di main,
    che restituisce al chiamante il valore restituito dall'invocazione di main,
    che restituisce al chiamante il valore restituito dall'invocazione di main,
    che restituisce al chiamante il valore restituito dall'invocazione di main,
    che restituisce al chiamante il valore restituito dall'invocazione di main,
    che restituisce al chiamante il valore restituito dall'invocazione di main,
    che restituisce al chiamante il valore restituito dall'invocazione di main,
    ...
    ;-)

  5. #5
    Originariamente inviato da MacApp
    Codice PHP:
    #include <stdio.h>

    int main(){
       
    printf("CIAO\n");
    return 
    main();

    restituisce al chiamante il valore restituito dall'invocazione di main,
    che restituisce al chiamante il valore restituito dall'invocazione di main,
    che restituisce al chiamante il valore restituito dall'invocazione di main,
    che restituisce al chiamante il valore restituito dall'invocazione di main,
    che restituisce al chiamante il valore restituito dall'invocazione di main,
    che restituisce al chiamante il valore restituito dall'invocazione di main,
    che restituisce al chiamante il valore restituito dall'invocazione di main,
    ...
    ;-)
    Si, ed a un certo punto "stack overflow", perchè?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da darth fener
    Si, ed a un certo punto "stack overflow", perchè?
    Anche questa discussione potrebbe andare in "stack overflow" se continuiamo cosi' ...

    Ad ogni chiamata di main viene usata una parte dello stack per conservare variabili locali e indirizzo di rientro ... e continuando all'infinito, ad un certo punto lo stack finisce!
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Ma quando faccio il return la memoria non viene rilasciata?Poi quando entra di nuovo nel main la riprende di nuovo, quindi dove sta il problema?

  8. #8
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    C'è il piccolo particolare che il main non esce mai.
    E comunque lo standard vieta chiamate ricorsive al main e adesso sai perché.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da darth fener
    Ma quando faccio il return la memoria non viene rilasciata?Poi quando entra di nuovo nel main la riprende di nuovo, quindi dove sta il problema?
    Quello che sbagli e' pensare che

    fai return e DOPO entra di nuovo nel main ...

    Nella return(main());

    PRIMA entra nel main e DOPO fa il return ... prova a pensare QUANTO DOPO ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    vedila' cosi':
    la funzione main chiama la funzione main,
    che chiama la funzione main,
    che chiama la funzione main,
    che chiama la funzione main,
    che chiama la funzione main,
    che chiama la funzione main,
    che chiama la funzione main,
    ...
    ;-)

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.