C ++ - Vektor -Index außerhalb des Bereichs Fehler

C ++ - Vektor -Index außerhalb des Bereichs Fehler
Wenn ein C ++--Programm ausgestellt wird, wird das zum Zugriff auf ein Element des Vektors verwendete Index-Programms außerhalb des Bereichs der Vektorindizes ausgestellt. Dies hängt jedoch vom Compiler ab. Mit dem G ++ - Compiler für Ubuntu wird der Standardwert oder ein anderer Wert zurückgegeben oder als in der Zelle dort angesehen, wenn sich das Index außerhalb des Bereichs befindet. Dies geschieht nur, wenn der Vektor bereits mit einigen Elementen definiert ist. Mit dem G ++ - Compiler wird der Vektor ohne Element unternommen, wenn der Vektor ohne Element deklariert wird, und es wird versucht, auf einen zugehörigen Speicherort (ohne ein Element) zuzugreifen, unter Verwendung einer Integer -Integer (sogar 0) der G ++ - den Fehler: “ Segmentierungsfehler (Kernbezahlung) ”.

Bevor Sie weiter lesen, müssen Sie Folgendes abrufen. Dieser Index wird verwendet, um das Element des Vektors zu verweisen. Jeder Index bezieht sich auf ein bestimmtes Element (Wert). Die Indexzählung beginnt von 0 und endet bei Vektorisierung - 1. Wenn also ein Vektor 10 Elemente hat, befindet sich das erste Element bei Index 0 und das zehnte Element befindet sich bei Index 9. Verwenden Sie den Index 10 im Vektor zum Lesen oder Ändern des Wertes eines Elements am Index 10, der nicht existiert, sollte eine Fehlermeldung außerhalb des Bereichs ausgeben. Mit dem G ++ - Compiler, solange ein Vektor definiert wurde (für die Elemente zugewiesene Speicher, auch wenn er Standardelemente ist), wenn ein Index außerhalb des Bereichs verwendet wird, wird der Standardwert des Vektorelementtyps oder eines anderen Der Wert des Typs wird zurückgegeben (oder soll dort geändert werden).

Außerhalb der Reichweite Illustration

Betrachten Sie die folgende Tabelle:

A B C D E F G H ICH J
-2 -1 0 1 2 3 4 5 6 7 8 9 10 11

Die erste Zeile zeigt, wie zehn Speicherzuweisungen für 10 Zeichen vorgenommen wurden. Unter den Zeichen in der Tabelle in der zweiten Zeile befinden sich die richtigen Indexs (Indizes). Verwenden des Index -1, -2, -3 usw., sollte zu einem ausgebildeten Fehler außerhalb des Bereichs führen. Verwenden des Index 10, 11, 12 usw., sollte auch zu einem aus dem Bereich ausgegebenen Fehler führen.

Dieser Artikel zeigt Situationen, in denen Fehler außerhalb des Bereichs ausgestellt werden. Der für die Code -Samples in diesem Artikel verwendete Compiler ist der G ++ - Compiler für Ubuntu. Vergessen Sie nicht, die Vektorbibliothek für jeden Compiler in das Programm einzubeziehen.

Fehler außerhalb des Bereichs für den definierten Vektor

Ein definierter Vektor ist einer, für den das Gedächtnis für die ersten Elemente zugewiesen wurde. Die Werte können Standard- oder praktische Werte für den Vektorelementtyp sein. Ein deklarierter Vektor ohne Initialisierung ist kein definierter Vektor. Für einen solchen Vektor gibt es keine Speicherzuweisung für ein Vektorelement. Ein solcher Vektor ist leer.

G ++ - Compiler für Ubuntu

Angenommen, es gibt zehn Elemente in einem Vektor; Ein nicht ungewöhnlicher Fehler von Personen, die in der Programmierung unerfahren sind, besteht darin, mit dem Index von 10 auf das zehnte Element zuzugreifen. Es sollte mit dem Index von 9 zugegriffen werden, da die Indexzählung von 0 beginnt. Betrachten Sie das folgende Programm mit 10 Elementen im Vektor und dem Zugriff auf das zehnte Element mit dem Index von 10:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

vectorvtr = 'a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'H', 'i', 'j';
char ch = vtr [10]; // Fehleranweisung
Cout<Rückkehr 0;

Dieses Programm mit dem G ++ - Compiler für Ubuntu gibt eine Ausgabe von ", was ein Charakter von nichts ist (kein Raum). Ein Charakter von Nichts ist das Standardcharakter für Zeichen in C++. Es gibt keinen elften Term für diesen Vektor. Die zweite Anweisung ist also eine Fehleranweisung, die vom G ++ - Compiler nicht erkannt wird. Mit dem G ++ - Compiler wird es zur Laufzeit immer noch nicht erkannt, und das Programm funktioniert falsch.

Einige andere Compiler

Wenn das obige Programm mit einigen anderen Compilern verwendet wird, wird die Fehleranweisung zur Laufzeit erkannt, und eine Ausnahme wird mit einer bei der Ausgabe veröffentlichten Fehlermeldung ausgeliefert. Der Fehler wird jedoch zur Kompilierungszeit immer noch nicht erkannt.

Betrachten Sie die folgende Erklärung:

Vektor vtr (10);

Dies sieht vielleicht nicht wie eine Definition aus, aber es ist eine Definition. Es gibt zehn Speicherorte für die zehn Vektorelemente mit dem Standardzeichenwert.

Außerirdischer Fehler für undefinierte Vektor

Ein deklarierter Vektor ohne Initialisierung ist kein definierter Vektor. Für einen solchen Vektor gibt es keine Zuordnung für ein Vektorelement. Ein solcher Vektor ist leer.

G ++ - Compiler für Ubuntu

Wenn ein deklarierter Vektor keine Initialisierung hat (oder keine Standardwerte), gilt die Verwendung des Indexs nicht für den Vektor beim Zugriff auf ein Element des Vektors, da es nicht gibt. Auch der Null -Index kann nicht verwendet werden, um auf das erste Element zuzugreifen, das nicht vorhanden ist. Im folgenden Programm wird versucht, auf das erste Element zuzugreifen, das nicht vorhanden ist:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

vectorvtr;
char ch = vtr [0]; // Fehleranweisung
Cout<Rückkehr 0;

Die erste Aussage in der Hauptfunktion deklariert einen Vektor ohne Speicherort für eines seiner Elemente. Diese Aussage ist keine Definition. Die zweite Anweisung versucht, den Wert bei Index 0 zu lesen. Dies ist eine Fehleranweisung, da der Vektor kein Element hat und daher bei einem Index Null kein Element vorhanden ist.

Mit dem G ++ - Compiler kompiliert das Programm erfolgreich, aber zur Laufzeit, wenn die zweite Aussage in der Hauptfunktion erreicht ist, wird das Programm gestoppt und die folgende Fehlermeldung veröffentlicht:

Segmentierungsfehler (Core Dumped)

Einige andere Compiler

Die Ausführung des obigen Programms in anderen Compilern und die Feststellung ihrer entsprechenden Fehlermeldungen bleibt dem Leser als Übung überlassen.

Abschluss

Der Vektor-Index-Fehler außerhalb des Bereichs tritt auf. Außerirdischer Fehler entspricht nicht ständig wie der Segmentierungsfehler (Kernbezahlt).