Desbordamiento de búfer en C + + es causada por algunos problemas diferentes . A menudo , se produce como parte de la operación de una función destinada a escribir en una matriz o acceder a la memoria profunda . Por lo general, se produce desbordamiento de búfer cuando el usuario o el programador introduce datos más allá del alcance de una variable o una matriz. Funciones que intentan ir más allá de este rango también pueden tratar de borrar los datos en el sistema, o redirigir el sistema mediante la eliminación o sobreescritura de la información . Las funciones en C + +
Funciones en C y C + + se comportan como se espera , en comparación con otros lenguajes de programación . Existen funciones , como cualquier otra variable o sistema de información, en la memoria y se hace referencia a la dirección . Funciones , por sí mismos , son bloques de código en la memoria que se hace referencia . Cualquier error que se produce por una referencia de función puede ser debido a una función no declarada , o una función llamada incorrectamente . Un error de desbordamiento de memoria intermedia sería más probable que vienen con el código dentro de la función .
Variables y Memoria
C + + es de tipo estático , lo que significa que el programador debe especificar el tipo de variable al declarar una variable. Esto es debido a que C + + hace a un lado los bloques de memoria de ciertos tamaños basado en el tipo de variable . Una variable de tipo entero (int ) declaró en un programa obtendrá un espacio de memoria reservada específicamente para un int. El bloque de memoria será el tamaño exacto de un número entero .
Matrices
matrices son conjuntos de variables contenidas en un solo nombre. Por ejemplo , la matriz a continuación se crea una lista de 10 números enteros , que se puede acceder mediante una referencia a un índice ( nombre [ 0 ] , nombre [ 1 ] , etc )
int nombre [ 10 ] ;
en lugar de un número entero , la matriz deja de lado suficiente espacio continuo para 10 . Sin embargo , ya que el acceso de índice de matriz se puede intentar en los valores más allá de lo que está contenido en el array ( nombre [ 11 ] , por ejemplo) , los errores pueden ocurrir si el programador no ver cómo se utiliza la matriz.
desbordamiento de Buffer
Debido a la naturaleza de las matrices en C + + , una matriz dentro de una función puede ser víctima de desbordamientos de búfer . Si un usuario introduce una entrada de caracteres más grandes que la matriz puede manejar , los caracteres adicionales se sobreponen a los datos adyacentes a la matriz en la memoria . Por ejemplo ,
ejemplo void ( ) { int
sesión [ 15 ] ;
int i = 0 ;
while ( cin >> a [i ] ) {
i + + ; }
}
el bucle "while" nunca va a terminar , y por el momento " i" llega a 15 , el usuario comenzará a introducir los datos que sobrescribe la memoria. Esto puede tener consecuencias no deseadas , como la reasignación de una variable local o , en determinadas circunstancias, la reescritura de punteros de función para hacer referencia diferente , el código malicioso .