Logo de Torre de Babel
Portada Libros Diseño web Artículos Glosario RSS
Buscar

Asignación dinámica de memoria en C

Todos los que programamos con C/C++, incluso los que nos consideramos experimentados, solemos emplear una significativa cantidad de tiempo depurando errores siempre relacionados con el mismo tema: la asignación dinámica de memoria. Siguiendo una serie de reglas básicas podemos reducir apreciablemente este tipo de fallos:

  1. Antes de usar un puntero comprobar que no es NULL. Introducir un if(q) usa_q_como_sea; nos ahorrará muchos disgustos.
  2. Asignar el valor NULL a todo puntero sin inicializar. Acostumbrarse a escribir char* q = NULL es una buena costumbre.
  3. Tras asignar memoria dinámicamente, inicializarla de inmediato. Tras un q = malloc(sizeof(X)) siempre un memset(q,0,sizeof(X)), así evitaremos usar la basura que hay en la memoria sin inicializar.
  4. Usar siempre strncpy() y strncat() al operar sobre cadenas asignadas dinámicamente, así evitaremos escribir más allá del tamaño del bloque, en zonas de memoria que no nos pertenecen.
  5. No calcular nunca a mano el tamaño de los operandos, en su lugar recurrir siempre al operador sizeof(). El tamaño de los tipos básicos y la alineación de los campos en las estructuras alteran el espacio que se ocupa.
  6. Al trabajar con cadenas, no olvidar que si hemos asignado N bytes dinámicamente, sólo podremos almacenar N-1 caracteres. Obvio, pero fuente de muchos quebraderos de cabeza.
  7. Antes de asignar a un puntero no nulo otra dirección, no olvidar liberar la memoria previamente asignada. La construcción if(q) free(q) ha de ser una costumbre antes de reutilizar una variable puntero.
  8. Cada free(q) irá siempre seguido de un q = NULL, así evitaremos acceder a bloques de memoria que ya hemos liberado.
  9. Moldear siempre los punteros al tipo correcto, de lo contrario la aritmética de punteros no funcionará. Una operación del tipo q++ nos llevará a una dirección u otra dependiendo del tipo de q.
  10. Antes de usar un puntero comprobar que no es NULL. Esta regla, primera y última, es fundamental y nunca suficientemente repetida. Comprobar siempre que un puntero no es NULL antes de leer o escribir con él.

Espero que estas indicaciones puedan ser de alguna utilidad a los que programan diariamente utilizando el lenguaje C.


Publicado el 31/3/2007

Microsoft Developer Day 2007

El próximo 29 de marzo tendrá lugar en Kinepolis (Pozuelo de Alarzón/Madrid) una nueva edición una nueva edición del Microsoft Developer Day, un evento en el que se darán a conocer las herramientas más avanzadas de Visual Studio Team System, así como distintas técnicas de desarrollo sobre seguridad, aplicaciones Web y Windows.

Microsoft aprovechará tambien para descubrir algunas de las características de la próxima versión de Visual Studio, conocida con el nombre en clave Orcas, incluyendo las extensiones a los lenguajes Visual Basic y C# y el prometedor LINQ.

Para terminar, habrá una sesión sobre desarrollo de gadgets para Windows Vista y la entrega de premios del concurso Gadgetizate.
Publicado el 19/3/2007


Curso de AJAX (III y IV)

Lo prometido es deuda, y aquí están los enlaces a la tercera y cuarta entrega de este curso sobre AJAX que he publicado en PC Actual.

  • Los elementos del servidor: Es la tercera entrega y en ella se detalla cómo preparar el servidor para ejecutar los guiones ASP.NET que responderán a las solicitudes de la interfaz AJAX desarrollada en las entregas anteriores.
  • La lógica del cliente: La última entrega se dedica a conectar la interfaz con los guiones del servidor, introduciendo el código JavaScript adecuado en las páginas para extraer los datos del usuario y los contenidos de cada canal al que se haya suscrito.

En el número correspondiente al mes de marzo, que ya está en los quioscos, publico en PC Actual un artículo dedicado a Visual Studio Orcas, el sucesor de Visual Studio 2005 que todo parece indicar aparecerá en 2008. También publico este mes, en la revista Personal Computer, un artículo para no programadores en el que detallo cómo aprovechar que el proveedor donde se tiene una página ofrece PHP para agregar un contador y un calendario.


Publicado el 1/3/2007

Curso de shaders

Torre de Babel - Francisco Charte Ojeda - Desde 1997 en la Web