Il runtime C/C++ elabora gli argomenti della riga di comando e crea un'area di memoria in cui vengono inseriti gli argomenti. Quindi chiama il numero main()
fornendo un conteggio del numero di argomenti insieme a un puntatore all'area in cui sono archiviati gli argomenti.
Così l'/ C++ di runtime C possiede l'area di memoria allocata ed è fino al C/C++ runtime per rilasciare l'area una volta che i main()
restituisce o se qualche altra funzione C/C++ è utilizzato per arrestare il programma come exit()
.
Questa procedura ha avuto origine con l'uso di C in Unix ed è stata mantenuta per C++ come parte del livello di compatibilità all'indietro che il comitato C++ ha cercato di mantenere.
Normalmente quando viene caricato il programma, il punto di ingresso avviato dal caricatore non è la funzione main()
ma piuttosto un punto di ingresso definito nel runtime C/C++. Il runtime C/C++ esegue vari tipi di inizializzazione per configurare l'ambiente che gli standard C/C++ affermeranno nel momento in cui la funzione main()
viene richiamata dal runtime C/C++ una volta completata l'inizializzazione.
Uno dei passaggi durante questa inizializzazione è l'analisi degli argomenti della riga di comando forniti che vengono quindi forniti alla funzione main()
come argomenti della funzione.
fonte
2014-09-15 14:28:36
il cosa cosa? eh? – thang
Cosa intendi con "non ha memoria allocata"? I puntatori in 'argv' sono tutti validi e puntano alla memoria a cui è sicuro accedere. Quale codice ti aspettavi di produrre un segfault? – Wyzard
Viene assegnato dalla libreria runtime prima che venga chiamato 'main()'. –