¿Paso 5: No sé qué tamaño eres?
MONTONES DE MEMORIAJunto a la pila, C++ crea otra gran cantidad de memoria llamada el montón. El montón puede utilizarse por el programador para libre, o asignar, memoria para el programa. Un programador puede asignar cualquier cantidad de memoria de la pila con la palabra clave "nuevo" como en el ejemplo siguiente:
char * pArray = new char [256];
Puede utilizar la nueva palabra clave cuando no sabe cuánta memoria se utilizará el programa.
Un problema común que muchos programadores llegan a través de la asignación de memoria es algo que llama un "desbordamiento". Un desbordamiento de búfer se produce cuando una expresión o función sobrescribe la memoria en las ubicaciones de memoria adyacentes. Esto puede suceder debido a arreglos de discos de longitud fija. Un uso común de matrices es hacer cadenas. Puede virar dos cadenas para crear una cadena concatenada. Si la cantidad de caracteres de la cadena es mayor que el tamaño de la matriz, sólo provocó un desbordamiento de búfer.
(ADVERTENCIA: DESBORDAMIENTOS DE BÚFER SON UNA EXPLOTACIÓN COMÚN USADA POR LOS HACKERS PARA EJECUTAR CÓDIGO ARBITRARIO EN UN SISTEMA REMOTO.)
NO TE OLVIDES DE LIMPIAR PARA ARRIBA DESPUÉS DE SÍ MISMO
Asignar la memoria en el montón es una función, pero tiene un peligro muy grande en C++: Si asigna memoria en el montón, debe recordar a devolverlo.
Volver memoria para el montón con la palabra clave "delete" como en el siguiente:
char * pArray = new char [256];
... utilizar toda la memoria que desee...
ahora devolver el bloque de memoria para el montón
Delete [] pArray;
pArray = NULL;
(Nota: eliminar uso para volver sin matriz y delete [] para un arreglo de discos.)
Si usted no devuelve memoria montón cuando termines con él, su programa lentamente consumiendo memoria y eventualmente frenar cada vez más como el sistema operativo intenta satisfacer su glotonería al parecer insaciable. Finalmente, el programa llegará a un alto como el sistema operativo ya no puede satisfacer sus solicitudes de memoria.
No es absolutamente tan malo volver la misma memoria para el montón. Que causa el programa estrellarse casi de inmediato. Se considera buena práctica de programación de cero a un puntero una vez que ha eliminado el bloque de memoria que apunta a por dos muy buenas razones:
●Deleting un puntero que contiene un valor nulo no tiene ningún efecto.
●NULL nunca es una dirección válida. Tratar de acceder a memoria en la ubicación de NULL siempre causará su programa dormir inmediatamente, que se volcará usted que existe un problema y hacer mucho más fácil de encontrar.
No tienes que borrar la memoria si su programa saldrá pronto - toda la memoria heap se restaura el sistema operativo cuando un programa termina. Sin embargo, volver la memoria que usted asigne fuera del montón es un buen hábito para entrar.