2014-09-15 17 views
8

So per cosa usiamo questo argomento, e so anche come lavorare con l'argomento.Allocazione memoria e argomento ** argv

C'è solo una cosa che ancora non capisco. Come un programma alloca la memoria per le stringhe che provengono dall'input. ** argv non ha memoria allocata all'inizio del programma, non è vero? Mi aspettavo segfault, ma non è successo.

Qualcuno sa come funziona questa allocazione di memoria?

+1

il cosa cosa? eh? – thang

+2

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

+4

Viene assegnato dalla libreria runtime prima che venga chiamato 'main()'. –

risposta

12

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.

Problemi correlati