Die C/C++ - Laufzeit verarbeitet die Befehlszeilenargumente und erstellt einen Speicherbereich, in den die Argumente eingefügt werden. Es ruft dann Ihre main()
auf, die Ihnen eine Anzahl der Argumente zusammen mit einem Zeiger auf den Bereich bereitstellt, in dem die Argumente gespeichert werden.
So ist die C/C++ Runtime besitzt den Bereich Speicher zugewiesen und es ist bis zu dem C/C++ Runtime den Bereich, sobald Ihre main()
wieder freigeben oder wenn eine andere C/C++ Funktion verwendet wird, um das Programm zu stoppen, wie exit()
.
Dieses Verfahren entstand mit der Verwendung von C unter Unix und wurde für C++ als Teil der Bereitstellung der Grad der Abwärtskompatibilität, die das C++ - Komitee versucht hat, zu erhalten, beibehalten.
Normalerweise, wenn Ihr Programm geladen wird, ist der Einstieg, der vom Loader gestartet wird, nicht Ihre main()
Funktion, sondern ein Einstiegspunkt, der in der C/C++ Laufzeit definiert ist. Die C/C++ - Laufzeitumgebung führt verschiedene Arten der Initialisierung aus, um die von den C/C++ - Standards angegebene Umgebung zu dem Zeitpunkt einzurichten, an dem die main()
-Funktion von der C/C++ - Laufzeit aufgerufen wird, sobald die Initialisierung abgeschlossen ist.
Einer der Schritte während dieser Initialisierung ist das Parsen der bereitgestellten Befehlszeilenargumente, die dann der main()
-Funktion als Funktionsargumente zur Verfügung gestellt werden.
was was? nicht wahr? – thang
Was meinst du mit "hat keinen reservierten Speicher"? Die Zeiger in 'argv' sind alle gültig und zeigen auf Speicher, auf den sicher zugegriffen werden kann. Welchen Code haben Sie erwartet, um einen Segfault zu erzeugen? – Wyzard
Es wird von der Laufzeitbibliothek zugewiesen, bevor 'main()' aufgerufen wird. –