Programación General > C/C++
Problemas Con Malloc() Y Free()
(1/1)
mido_666:
Saludos y gracias por adelantado.
En el siguiente código (espero lo entiendan):
--- Código: Text --- #include <stdio.h> int main(void){float *bufferFloat;int num, i; /*Lee el numero de datos que se van a introducir y despues pide los valores*/printf ("\nCuántos valores va a introducir? ");scanf ("%d", &num);bufferFloat = (float *) malloc (sizeof(float) * num); for (i=0;i<num;i++){printf ("Introduzca el valor numero %d: ", i+1);scanf ("%f", (bufferFloat + i));} for (i=0;i<num;i++){printf ("El valor numero %d que introdujo fue ----> %f\n", i+1, *(bufferFloat+i));free(bufferFloat +i);} return 0;}
Por qué al ejecutar el código, cuando introduzco que el numero de valores es mayor a 3, ¿por qué salta error de Violación de segmento al ejecutarse el free con i mayor a 3?
He probado y el programa funciona perfectamente (introduciendo los datos adecuados) si omito la parte del código de free.
Miguel desde Soria.
Martin Candurra:
Sabes cual es el problema, vos estas haciendo un solo malloc, por lo que basta un solo free para liberar.
Si vos hubieras hecho un
for(i=0; i<num; i++)
bufferfloat+i = (float *) malloc ( sizeof(float));
estaria bien liberar como lo estas haciendo, pero al pedir un solo bloque de tamaño num * sizeof(float) basta con que liberes solo la direccion que obtuviste.
Espero haber sido claro.
Saludos.
mido_666:
Muchas gracias ya solucioné el problema.
Por su puesto fuiste muy claro y conciso, te agrezco otra vez el tiempo empleado.
Miguel.
Navegación
Ir a la versión completa