• Lunes 29 de Abril de 2024, 00:08

Autor Tema:  Problemas Con Malloc() Y Free()  (Leído 1196 veces)

mido_666

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
    • http://www.geocities.com/mato_rrales
Problemas Con Malloc() Y Free()
« en: Viernes 12 de Diciembre de 2003, 18:29 »
0
Saludos y gracias por adelantado.
En el siguiente código (espero lo entiendan):
Código: Text
  1.  
  2. #include <stdio.h>
  3.  
  4. int main(void)
  5. {
  6. float *bufferFloat;
  7. int num, i;
  8.  
  9. /*Lee el numero de datos que se van a introducir y despues pide los
  10.   valores*/
  11. printf ("\nCuántos valores va a introducir? ");
  12. scanf ("%d", &num);
  13. bufferFloat = (float *) malloc (sizeof(float) * num);
  14.  
  15. for (i=0;i<num;i++)
  16. {
  17. printf ("Introduzca el valor numero %d: ", i+1);
  18. scanf ("%f", (bufferFloat + i));
  19. }
  20.  
  21. for (i=0;i<num;i++)
  22. {
  23. printf ("El valor numero %d que introdujo fue ----> %f\n", i+1, *(bufferFloat+i));
  24. free(bufferFloat +i);
  25. }
  26.  
  27. return 0;
  28. }
  29.  
  30.  

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.

- Miguel - On ne voit bien qu'avec le coeur

Martin Candurra

  • Miembro activo
  • **
  • Mensajes: 36
    • Ver Perfil
Re: Problemas Con Malloc() Y Free()
« Respuesta #1 en: Viernes 12 de Diciembre de 2003, 18:49 »
0
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

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
    • http://www.geocities.com/mato_rrales
Re: Problemas Con Malloc() Y Free()
« Respuesta #2 en: Viernes 12 de Diciembre de 2003, 18:55 »
0
Muchas gracias ya solucioné el problema.
Por su puesto fuiste muy claro y conciso, te agrezco otra vez el tiempo empleado.

Miguel.

- Miguel - On ne voit bien qu'avec le coeur