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

[0] Índice de Mensajes

Ir a la versión completa