Pufferüberlauf in C + + wird durch ein paar verschiedene Probleme verursacht. Oft kommt es im Rahmen der Operation einer Funktion bestimmt , um ein Array zu schreiben oder auf tiefem Speicher . Typischerweise tritt Pufferüberlauf , wenn ein Benutzer oder Programmierer gibt Daten über den Bereich von einem oder ein Array . Funktionen, die über diesen Bereich hinaus gehen versuchen kann auch versuchen, Daten in das System zu löschen, oder Umleiten des Systems durch das Löschen oder Überschreiben von Daten . Funktionen in C + +
Funktionen in C und C + + wie erwartet , im Vergleich zu anderen Programmiersprachen. Funktionen vorhanden sind, wie jede andere Variable oder System-Informationen, im Speicher und sind unter der Adresse verwiesen . Funktionen , durch sich selbst, sind nur wenige Blocks von Code im Speicher , auf die verwiesen . Jeder Fehler durch eine Funktion Referenz geworfen sein könnte wegen einer nicht angemeldeten Funktion oder einer Funktion namens falsch . Ein Pufferüberlauf Fehler würde eher aus dem Code innerhalb der Funktion kommen .
Variablen und Speicher
C + + ist statisch typisiert , was bedeutet, dass der Programmierer muss eine Variable angeben bei der Deklaration einer Variablen. Dies liegt daran, C + + hebt Speicherblöcke bestimmter Größen der variablen Typs. Eine ganze Zahl (int) deklariert in einem Programm erhalten einen Platz im Speicher beiseite speziell für einen int gesetzt . Der Speicherblock wird die genaue Größe eines Integer sein .
Arrays
Arrays sind Sammlungen von Variablen in einem Namen enthalten . Zum Beispiel kann die Anordnung unten wird eine Liste von 10 Zahlen , die durch Bezugnahme auf einen Index ( Name [ 0] , name [1] , etc.)
int name [ 10] erreicht werden kann ;
Statt einer Zahl , setzt das Array beiseite genügend zusammenhängender Platz für 10 Personen. Da jedoch Array-Index -Zugriff kann auf Werte hinaus, was in dem Array (name [11] , zum Beispiel) , Fehler kann auftreten, wenn der Programmierer nicht zusehen muss , wie sie das Array verwendet .
Enthaltenen versucht werden
Buffer Overflow
Aufgrund der Natur von Arrays in C + +, ein Array innerhalb einer Funktion kann zum Opfer fallen, Buffer Overflows . Wenn ein Benutzer eine Eingabe von Zeichen größer als das Array verarbeiten kann, werden die zusätzlichen Zeichen überschreiben Daten neben dem Array im Speicher . Zum Beispiel
void Beispiel () { int
login [ 15] ;
int i = 0;
while ( cin >> a [i] ) {
i + +; }
}
Die " while"-Schleife wird nie enden , und durch die Zeit "i" 15 erreicht , wird der Benutzer die Eingabe von Daten beginnen , die Speicher überschreibt . Dies kann unbeabsichtigte Folgen haben , wie Umwidmung einer lokalen Variablen , oder , unter bestimmten Umständen , Umschreiben der Funktion Zeiger auf verschiedene , Schadcode verweisen.