C ++ Fehler terminate aufgerufen nach dem Werfen einer Instanz von „stdbad_alloc“

C ++ Fehler terminate aufgerufen nach dem Werfen einer Instanz von „stdbad_alloc“

Da wir mit Fehler vertraut sind, die aus irgendeinem Grund in unserem Code auftreten können, unabhängig davon. Es gibt drei Arten von Fehlern. Einige von ihnen sind logisch, während einige Syntax- oder Kompilierungsfehler sind. Heute werden wir einen Fehler diskutieren, der aufgrund einiger Speicherprobleme auftreten kann. Diese Art von Problemen sind manchmal hektische Aufgaben, um zu lösen. Aber heute werden wir sie kurz diskutieren, um diese Fehler zu lösen. Der Fehler, den wir lernen werden, lautet: "Beenden Sie nach dem Werfen einer Instanz von 'std :: bad_alloc'". Dieser Fehler hängt mit dem Speicher zusammen. Ein solcher Fehler kann infolge der folgenden Folgen auftreten:

Zuteilungsfehler im Speicher: Dies kann aufgrund der großen Teile des Speichers auftreten, die mit dem Schlüsselwort „Neu“ zugewiesen werden, da es zu einem Speicherausfall führt. Der Fehler wird angezeigt, der zeigt, dass es keinen vorhandenen Speicher gibt, um die Daten zuzuweisen.

Aufgaben, die Ram in Bedtools konsumieren: Dieser Fehler kann in Bedtools auftreten. Dieser Fehler tritt auf, was zeigt, dass der größte Teil des RAM von der Aufgabe, die Sie ausführen, verbraucht werden.

Die Korruption des Gedächtnisses: Der defekte Code führt zu dieser Art von Fehler. Der Coder muss sicherstellen, dass er den richtigen Code geschrieben hat. Manchmal wird es sarkastisch, während sie eine Eingabe vom Benutzer entgegennehmen und dann das Schlüsselwort „neu“ verwenden, um den Speicher zum Zeitpunkt der Kompilierung zuzuweisen. Manchmal macht es es falsch, weil das neue Keyword erwartet, dass der richtige Wert daran übergeben wird. Wenn wir versuchen, eine falsche Eingabe zu übergeben, verursacht dies den Fehler bad_alloc.

Syntax:

Es ist ein Kompilierungsfehler. Es hat keine Syntax. So sieht es im Folgenden aus:

ERROR: Beenden Sie aufgerufen, nachdem Sie eine Instanz von 'std :: bad_alloc' geworfen haben '

Wo 'std :: bad_alloc' Zeigt das Objekt an, das von der Allokationsfunktion als Ausnahme geworfen wird, die den Fehler der Zuordnung im Speicher zeigt.

Beispiel:

Lassen Sie uns ein Beispiel implementieren, in dem wir die Werte vom Benutzer über Schüler nehmen. Nachdem wir sie in einem Speicherhaufen gespeichert haben, zeigen wir sie dann mit einer für die Schleife an. Zunächst schließen wir die "iOstream", "String" und die "CSTDLIB" -Header -Dateien ein. Mit dem „iOstream“ wird die E/A -Operationen wie CIN, Cout usw. durchgeführt. Eine String -Header -Datei wird verwendet, um mit der Stringhandhabung zu arbeiten. Und die "CSTDLIB" -Bibliothek ist eine Sammlung von Funktionen, die bei einigen mathematischen Funktionen helfen können. Die Konvertierung eines Datentyps erfolgt mit seiner definierten Funktion.

Danach erstellen wir zwei Arrays - "Stud_id []" von Größe Drei, die die ID des Schülers und "makrs []" von Größe 5 speichert, die die Markierungen der Schüler streift. Dann wird eine Ganzzahlvariable verwendet, um auf die für die Schleife verwendeten Werte zuzugreifen. Dann eine zusätzliche Zeichenfolgenvariable "ID", der wir den Wert von "Stud_id" zuweisen und im Speicher speichern. Verwenden Sie dann die für die für den Benutzer begonnene Schleife von 0 bis 3.

Jetzt weisen wir die ID zu, einen Speicher, der die Variable „Temp“ verwendet. Danach kopieren wir den Temperaturwert in die "ID". Dann verwenden wir die Funktion „substr ()“ bis zur Länge der ID, die in der „ID“ gespeichert ist. Danach weisen wir die „Markierungen [k]“ „ATOI (TEMP)“ zu. Dann verwenden wir außerhalb der Schleife die für die Schleife erneut. Wir erhalten die Werte und zeigen sie als Ausgabe an. Wir führen den Code aus, indem wir den Nullwert zurückgeben.

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

char Stud_id [3]; int Marks [5];
int k;
String -ID;
für (k = 0; k <= 3; k++)

Cout<< "Kindly enter an ID:";
Cin >> id;
char* temp = new char [id.size ()+1]; id.Kopie (Temp, ID.size () + 1);
Stud_id [k] = id [0]; temp = new char [id.size ()-2];
Id = id.Substr (2, id.Länge());
Ausweis.Kopie (Temp, ID.size () + 1);
Markierungen [k] = atoi (temp);

Cout << endl;
Cout << "Name" << " "<< "Average" << endl;
für (k = 0; k <= 5; k++)
Cout << stud_id[k] <<" "<< marks[k] << endl;

Rückkehr 0;

Nach der Ausführung wird der Fehler nicht zuerst angezeigt, während wir versuchen, die benutzerdefinierten Werte an ihn zu übergeben, und den Fehler, der im Folgenden angezeigt wird. Wenn wir diesen Fehler ansehen, können wir den Grund für den Fehler nicht identifizieren. Jetzt beheben wir unseren Code, der uns daran hindert, Speicherzuweisungsfehler zu haben.

Der folgende Code ist der fehlerfreie Code, in dem wir den unnötigen Teil entfernen, der den RAM-Verbrauch verursacht. Wir lemmatisieren die Markierungen [] Array in den Index 3, der im vorherigen Code ausgebunden ist. Wo in der Schleife, verwenden wir die “<” less-than sign instead of less-than-or-equal-to “<=” in both loops. This prevent the compiler from moving out of bounds. We remove the “temp” string variable because we don't need it anymore. Then, we remove the line of code in which we are trying to limit the size of the “Id” variable to less than “2”. It causes the new keyword to be incorrect. After removing all unnecessary code, we re-execute the code.

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

char stud_id [3];
int Marks [3];
int k;
für (int k = 0; k < 3; k++)
Cout<< "Kindly enter an ID:";
cin >> stud_id;
Cin >> Marks [K];

Cout << endl;
für (k = 0; k < 3; k++)
Cout << stud_id[k] <<" "<< marks[k] << endl;

Rückkehr 0;

Im vorherigen Code haben wir einige Änderungen darin vorgenommen, um den Fehler „std :: bad_alloc“ zu verhindern. Nach der Ausführung wird die Ausgabe im Folgenden angezeigt. Es fordert den Benutzer auf, die ID am Ende dreimal einzugeben. Die ID und die durchschnittliche Berechnung werden angezeigt. Dieses Mal spielt es keine Rolle, welchen Wert wir an ihn übergeben. Wir können versuchen, einen gewünschten Wert hinzuzufügen, sodass kein Fehler angezeigt wird.

Abschluss

In diesem Leitfaden haben wir einen Fehler untersucht, der aufgrund des Ausfalls der Speicherzuweisung auftreten kann. Dies liegt daran. Es ist schwierig, diesen Fehler zu verstehen, da wir den gesamten Code lesen müssen, um zu überprüfen, wo der Fehler auftritt. Wir haben erklärt, wie diese Fehler erfasst werden können und wie sie gelöst werden werden. Wir hoffen, dass dies Sie bei der Behebung dieser Art von Problem führen kann.