Anda di halaman 1dari 4

Cmo evitar las fugas de memoria en

C++

programer image by kuhar from Fotolia.com
Cmo evitar las fugas de memoria en C++. Una fuga de memoria es un tipo de error de
programacin que ocurre cuando un programa reserva ms memoria de la que libera. De
esta forma, una aplicacin puede quedarse sin memoria y causar que el sistema falle.
Para prevenir las fugas de memoria, debes saber cuando ocurren frecuentemente y ser
serio cuando utilizas los operadores "new" y "delete" de C++.
Nivel de dificultad:
Moderadamente difcil
Otras personas estn leyendo
Pelculas que debes ver antes de morir
El desage del fregadero del bao con fugas en las juntas
Necesitars
Destreza con C++
Un compilador de C++
Un depurador y otras herramientas de software investigativo
Instrucciones
1. 1
Entiende los operadores bsicos. El operador "new" de C++ reserva memoria de
dinmica. El operador "delete" libera memoria dinmica. Por cada "new",
deberas utilizar un "delete" para que liberes la misma cantidad de memoria que
has reservado: char* str = new char [30]; // Reserva 30 bytes para almacenar una
cadena. delete [] str; // Limpia esos 30 bytes y hace que str no apunte a ningn
lugar.
2. 2
Reserva memoria slo si has borrado. En el siguiente cdigo, str consigue una
nueva direccin con la segunda reserva. La primera direccin se pierde
irreparablemente, de la misma forma que los 30 bytes a los que apuntaba. Ahora
son imposibles de liberar, y tienes una fuga de memoria: char* str = new char
[30]; // Da una direccin de memoria a str. // delete [] str; // Elimina el primer
comentario marcado en esta lnea para corregir. str = new char [60]; // Da otra
direccin de memoria a str, y la primera se pierde para siempre delete [] str; //
Esto elimina los 60 bytes, no slo los primeros 30.
3. 3
Vigila las asignaciones de punteros. Cada variable dinmica (memoria reservada
en ejecucin) necesita ser asociada a un puntero. Cuando una variable dinmica
se desasocia de su puntero, es imposible borrarla. De nuevo, esto produce una
fuga de memoria: char* str1 = new char [30]; char* str2 = new char [40];
strcpy(str1, "Fuga de memoria"); str2 = str1; // Mal! Ahora los 40 bytes son
imposibles de liberar. delete [] str2; // Esto elimina los 30 bytes. delete [] str1; //
Posible violacin de acceso. Qu desastre!
4. 4
Ten cuidado con los punteros locales. Un puntero que declares en una funcin se
almacena en la pila, pero la variable dinmica a la que apunta se reserva de
forma dinmica. Si no la borras, se mantendr despus de que el programa salga
de la funcin: void Leak(int x){ char* p = new char [x]; // delete [] p; // Elimina
la primera marca de comentario para corregir. }
5. 5
Presta atencin a los corchetes despus de "delete". Utiliza "delete" solo para
liberar un nico objeto. Utiliza "delete" [] con corchetes para liberar un vector
dinmico. No hagas algo como esto: char* one = new char; delete [] one; // Mal
char* many = new char [30]; delete many; // Mal!
Cmo usar funciones grficas en C++
Escrito por mark keller | Traducido por daniela laura arjones





Cmo usar funciones grficas en C++.
Ablestock.com/AbleStock.com/Getty Images
El C++ lenguaje de programacin no incluye funciones de grficos nativos, ni ningn
contenido en la mayora de las bibliotecas estndar. Para mostrar grficos con C++ es
necesario instalar una biblioteca externa, como Allegro. Allegro es una biblioteca libre,
de programacin de juego multiplataforma con cientos de funciones para la
manipulacin de audio, lectura y escritura de archivos, para la entrada del usuario y, por
supuesto, manipular grficos.
Nivel de dificultad:
Fcil
Otras personas estn leyendo
Cmo usar Allegro para crear grficos en C
Cmo convertir un formato de OrCAD a Allegro
Instrucciones
1. 1
Instala Allegro, siguiendo la documentacin para configurarlo con el compilador
de C++. Crea una pequea imagen con un programa de grficos como GIMP o
MS Paint y gurdalo en el directorio que vas a utilizar para tu proyecto.
Comienza un nuevo archivo .cpp, escribiendo el cdigo en el editor de tu IDE o
un simple programa de edicin de texto.
2. 2
Incluye los archivos de cabecera necesarios para acceder a las funciones de la
biblioteca Allegro. Necesitars dos de estos archivos para los fines de este
programa (la principal cabecera Allegro y la cabecera del mdulo grfico). El
cdigo de este se ver as: # include <allegro5/allegro.h> # include
<allegro5/allegro_image.h>
3. 3
Crea la funcin main() para tu programa, junto con las variables para el manejo
de argumentos de la lnea de comandos. Llama las funciones de iniciacin, tanto
para el ncleo Allegro como para los grficos complementarios para configurar
el sistema y te permiten usar otras funciones de Allegro. Esto debera ser similar
al siguiente: int main (int argc, char * argv []) { al_init(); al_init_image_addon();
4. 4
Crea indicadores para manejar la pantalla y la imagen que se mostrar en
pantalla. Asigna estos valores punteros para establecer la resolucin de pantalla
y la carga de la imagen. El cdigo para hacer esto debe ser similar al siguiente:
ALLEGRO_DISPLAY *my_display = al_create_display(640, 480);
ALLEGRO_BITMAP *my_bitmap = al_load_bitmap("Image.png");
5. 5
Borra la pantalla a un negro slido y dibuja la imagen sobre el mismo en la
esquina superior izquierda de la pantalla. Los valores de los argumentos
al_map_rgb() se pueden cambiar para asignar un color RGB diferente a la
pantalla, mientras que los dos primeros argumentos de la funcin
al_draw_bitmap() se pueden cambiar para alterar la posicin de la imagen. Este
cdigo debe ser similar al siguiente: al_clear_to_color (al_map_rgb (0,0,0));
al_draw_bitmap (my_bitmap, 0, 0, 0);
6. 6
Voltea los buffers de pantalla para mostrar la imagen en la pantalla. La pantalla
Allegro usa dos buffers, la parte posterior para apoyar y la parte frontal para
imprimir en la pantalla. Mover de un tirn los dos te permite ver los resultados
de las funciones grficas anteriores. Llama al_rest() para hacer que el programa
espere 10 segundos antes de continuar. al_flip_display(); al_rest (10.0);
7. 7
Destruye la imagen y las variables de visualizacin, liberando la memoria
utilizada para almacenar su contenido. Finaliza el programa una vez que estos
datos estn libre, de la siguiente manera: al_destroy_bitmap (my_bitmap);
al_destroy_display (my_display); return 0; }
8. 8
Compila el programa almacenando el archivo ejecutable en la misma carpeta
que la imagen que has creado.

Anda mungkin juga menyukai