Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Crear etiquetas autoincrementales con memoria dinámica

Estas en el tema de Crear etiquetas autoincrementales con memoria dinámica en el foro de C/C++ en Foros del Web. Buenas tardes a tod@s! Traigo una cuestión aquí, haber si alguien que sepa más sobre C y el manejo de la memoria dinámica me lo ...
  #1 (permalink)  
Antiguo 24/03/2012, 11:07
 
Fecha de Ingreso: noviembre-2010
Ubicación: laudio
Mensajes: 61
Antigüedad: 13 años, 11 meses
Puntos: 1
Información Crear etiquetas autoincrementales con memoria dinámica

Buenas tardes a tod@s!

Traigo una cuestión aquí, haber si alguien que sepa más sobre C y el manejo de la memoria dinámica me lo puede resolver...

Es para una asignatura de la universidad, y el tema es el siguiente:

Necesito crear en tiempo de ejecución etiquetas del estilo siguiente:

#etiq1
#etiq2
#etiq3
...
#etiqN

Es para la asignatura de compiladores, un programa que genera código intermedio y, por lo tanto, necesito de instrucciones condicionales y de salto --> por lo que se justifica la existencia de etiquetas (si_falso_ir_a, si_cierto_ir_a, etc).

El profesor nos ha dado pistas de cómo hacer dos funciones: una que cree las etiquetas char* etiqNew() y otra que las libere void etiqFree(char*).

Además, nos ha dicho que se tiene que hacer con memoria dinámica, obviamente, porque para cada llamada a la función etiqNew() nos tiene que devolver una etiqueta diferente y autoincremental: con las funciones malloc() y para liberarlas con free().

El caso es que no sé usar muy bien la memoria dinámica en C (utilicé ADA con listas ligadas para aprender la memoria dinámica).

Alguien me puede echar un cable? Muchísimas gracias!!!!! Y gracias a este foro también!
  #2 (permalink)  
Antiguo 26/03/2012, 13:43
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 4 meses
Puntos: 73
Respuesta: Crear etiquetas autoincrementales con memoria dinámica

El prototipo de malloc es

void *malloc (int bytes_a_reservar);

Si necesitas que los datos sean de otro tipo, tendrás que hacer un cast y calcular el número de bytes que necesitas. Por ejemplo:

ptrInt = (int *)malloc(10, sizeof(int))

te reservará espacio para 10 enteros.

El prototipo de free es

void free(void *ptr)

Aquí no necesitas hacer el cast, da igual el tipo de dato apuntado por ptr. Eso sí, asegúrate de que lo que liberes con free sean bloques de memoria reservados anteriormente mediante malloc o alguna de las funciones de su familia (calloc y realloc).

Sobre la generación de las etiquetas, supongo que te refieres a que la primera vez que llamo a etiqNew() tiene que devolverme #etiq1, la segunda vez, #etiq2, y así sucesivamente. Lo que no tengo claro es el borrado. Por ejemplo, si tengo ya de #etiq1 a #etiq5 y elimino #etiq3 porque ya no la necesito, la próxima etiqueta que me devuelva, ¿tendría que ser #etiq3, ya que "la casilla está libre", o simplemente devuelvo #etiq6? Lo digo porque, en el primer caso, la cosa se complica.

Etiquetas: etiquetas, funcion, int, memoria, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:59.