Aprender de los punteros de C++ para captar (5 / 6 paso)

¿Paso 5: No sé qué tamaño eres?

MONTONES DE MEMORIA

Junto 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.

Artículos Relacionados

Aerógrafo básico - estos son los conceptos básicos para aprender a aerógrafo

Aerógrafo básico - estos son los conceptos básicos para aprender a aerógrafo

Lo básico del aerógrafo, cambiando colores - montaje - desmontaje - limpieza - los mejores videos gratis están aquí cambio de colores - desmontaje - limpieza - montajeTodo el mundo necesita saber lo básico para poder cuidar de su nueva pieza de mater
Los idiotas guían para pokemon

Los idiotas guían para pokemon

bien, después de ver KVG super freak de builder's instructable aunque dejó muchos. Estoy aquí para aclarar las cosas.Pokemon es un juego de cartas, juego de video, y TV show. voy a hablar sobre todos ellos en este instructable.Paso 1: juego de cartas
Ingeniería inversa para emular los cartuchos de tinta para una impresora Epson

Ingeniería inversa para emular los cartuchos de tinta para una impresora Epson

durante los últimos dos años, he estado planeando construir yo mismo una impresora 3D de algunas impresoras de inyección de tinta viejo que yo había recogido durante los años. Pero no hasta hace dos semanas había hecho empecé a trabajar en él.La impr
Modificación de un llavero de puntero Laser barato para uso General

Modificación de un llavero de puntero Laser barato para uso General

Casi todos han jugado con un puntero láser antes, especialmente los que tienen gatos. En los Laboratorios de H3 encontramos estos particulares en un dólar almacenar y ponerlos para utilizar en nuestro proyecto de pista de herramienta de poder.Estos l
Usando los botones y sensores para hacer música con el Edison de Intel

Usando los botones y sensores para hacer música con el Edison de Intel

ObjetivosSentirse cómodo con el Edison al prototipo de un proyecto de hardwareConstruir una sencilla aplicación de Node.jsJugar con el poder de WebSockets y redes de tiempo realAprovechar de Cylon.js fácil de usar interfaz con botones y sensoresExplo
Puntero de Dremel para el modelado preciso

Puntero de Dremel para el modelado preciso

cada vez que estoy tratando de Dremel un trozo más fino a una altura específica, utilizar una Dremel montada en una mesa especial que se monta en la mesa de trabajo. Sin embargo, si la broca Dremel no va todo el camino a través de la pieza, no puedo
Que los niños listos para pintar

Que los niños listos para pintar

poner las camisetas, ropa o delantales en.  Tomar las fotos.Establecer directrices, si es necesario.  Digo a mis hijos que si quieren levantarse, tienen que ir a lavarse las manos primero o me piden una toallita.  Esto es para que nada consigue la pi
Cómo jugar los acordes del Piano para principiantes

Cómo jugar los acordes del Piano para principiantes

En este instructable, usted aprenderá cómo tocar cualquier acorde mayor o menor en el piano.¿Qué es un acorde?Un acorde es una combinación de notas al mismo tiempo. Hay tipos de acordes diferentes pero acordes mayores y menores son los más comunes y
Los mangos de madera para las sartenes de hierro fundido

Los mangos de madera para las sartenes de hierro fundido

Quería una manija para mis sartenes de hierro fundido, así que no siempre tengo que usar una toalla para agarrarlos. Compré un mango de silicon para este propósito, pero cuando se quedó en la sartén que se convirtió demasiado caliente para manejar. E
Los Hackers HEMA: Inserciones para guantes de lacrosse

Los Hackers HEMA: Inserciones para guantes de lacrosse

IntroducciónBienvenidos a la primera instructables de la comunidad de facebook: Hackers de HEMA. Una comunidad que se centra en compartir y desarrollar ideas de modificación de equipos.El dedo inserta (imagen 1) en esta "modificación", mira en p
Los sostenedores de taza para un mini refrigerador de montaje

Los sostenedores de taza para un mini refrigerador de montaje

Yo estoy planeando un viaje de camping regreso a la playa con mi esposa este verano y quería una nevera pequeña, con ruedas con sostenedores de taza empotrada en la tapa. No existe. La más pequeña nevera con ruedas que encontré con sostenedores de ta
Cómo utilizar el rodillo de losa y bajar moldes para hacer un tazón de fuente

Cómo utilizar el rodillo de losa y bajar moldes para hacer un tazón de fuente

esto le mostrará cómo utilizar mi otros dos instructables (rodillo de la losa y el molde de la depresión) para mano-construye un tazón de fuente.Paso 1: Materiales necesarios Se necesita:Arcilla,Rodillo de la losa,Perno de balanceo,Molde de la depres
Los titulares de tarjetas (para el bolsillo)

Los titulares de tarjetas (para el bolsillo)

siempre soy flexión y aplastamiento mis tarjetas en mi bolsillo. así que hice algo que sostenerlos y mantenerlos seguros mientras trabajo...Funciona muy bien y se ve con clase cuando yo les entregue.Paso 1: reunir tus cosas *** Seguridad primera ***U
Para soldar los alambres múltiples para una Junta de distribución

Para soldar los alambres múltiples para una Junta de distribución

A veces es necesario dividir/señal de energía de un solo cable para varias salidas. Normalmente prefiero usar un bloque terminal y distribución para algo como esto, pero a veces no es factible, como cuando está limitado el espacio o todo lo que neces