Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: NOB2014 en 8 Junio 2016, 02:51 am



Título: Matriz de punteros, duda al liberar memoria[C]
Publicado por: NOB2014 en 8 Junio 2016, 02:51 am
Hola, amigos. -
La duda es ¿debo liberar la memoria con un bucle o simplemente liberar el primer puntero?, lo que me sucede es que no me da ningún error, pero no tengo manera de comprobar si esto es correcto, por lo menos por mis escasos conocimientos de memoria dinámica desconozco cómo podría comprobarlo. -   
Con el barullo que tengo de tantas cosas nuevas no sé si logro hacerme entender, valga el intento. -

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define safeFree(p) saferFree((void**)&(p))
  5.  
  6. void ingreso( void );
  7. void imprimir( int numeros[], size_t contador );
  8. void saferFree( void **pp );
  9.  
  10. int main( void ){
  11.  
  12. ingreso();
  13.  
  14. return 0;
  15. }
  16.  
  17.  
  18. void ingreso( void ){
  19. size_t contador=0, ingreso, ch, ok;
  20. int *numeros=NULL, *tmpNumeros=NULL;
  21.  
  22. do{
  23. do{
  24. printf( "\n Ingrese un numero [0 para finalizar]....:");
  25. ok = scanf( "%lu", &ingreso ) == 1 && ingreso >=0;
  26. while( (ch = getchar()) != '\n' && ch != EOF );
  27. }while( !ok );
  28.  
  29. contador++;
  30. tmpNumeros = (int *)realloc( numeros, contador * sizeof(int) );
  31. if( tmpNumeros != NULL ){
  32. numeros = tmpNumeros;
  33. numeros[contador-1] = ingreso;
  34. }
  35. else{
  36. safeFree( numeros );
  37. puts( "Error en asignar memoria....." );
  38. exit(1);
  39. }
  40.  
  41. }while( ingreso >= 1 );
  42.  
  43. imprimir( numeros, contador );
  44. safeFree( numeros );
  45. }
  46.  
  47. void imprimir( int numeros[], size_t contador ){
  48. size_t i;
  49.  
  50. for(i=0; i<contador-1; i++){
  51. printf( "\n %d", numeros[i] );
  52. }
  53. }
  54.  
  55. void saferFree(void **pp) {
  56. if (pp != NULL && *pp != NULL) {
  57. free(*pp);
  58. *pp = NULL;
  59.        }
  60. }
Debo aclarar que el código es casi todo mío por eso no puedo averiguarlo en el libro con el que estoy estudiando. -
Saludos.




Título: Re: Matriz de punteros, duda al liberar memoria[C]
Publicado por: fary en 8 Junio 2016, 10:13 am
Como lo estás haciendo lo haces bien.

realloc se encarga de liberar la.memoria anterior.

Saludos.


Título: Re: Matriz de punteros, duda al liberar memoria[C]
Publicado por: NOB2014 en 9 Junio 2016, 03:04 am
Hola, fary.
Muchas gracias por ocuparte.-

Saludos.