elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] Memoria dinámica. Malloc, Realloc
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C] Memoria dinámica. Malloc, Realloc  (Leído 2,894 veces)
GGZ

Desconectado Desconectado

Mensajes: 144



Ver Perfil
[C] Memoria dinámica. Malloc, Realloc
« en: 19 Noviembre 2015, 00:47 am »

Hola a todos!

Me tira un error, en realidad no sé bien como usar realloc.

Código
  1. /*
  2. Escribir un programa que lea enteros y los almacene en un arreglo
  3. sin conocer de antemano la cantidad de valores que se leerán.
  4. El programa deberá completar el arreglo hasta que se ingrese un número negativo,
  5. valor que no se agregará a la mencionada estructura de datos. Finalmente deberá imprimir
  6. el promedio de los elementos del arreglo.
  7. */
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11.  
  12.  
  13. int main (void){
  14. int a,promedio;
  15. int i;
  16. int *AR=malloc (1*sizeof(int));
  17. int *tmp_AR;
  18.  
  19. i=promedio=0;
  20. printf ("Number no negative: \n");
  21. scanf ("%d",&AR[i]);
  22. while (AR[i]>=0) {
  23. promedio+=AR[i];
  24. scanf ("%d",&AR[i]);
  25.  
  26. tmp_AR=realloc(AR,(1+i)*sizeof(int));
  27. if (tmp_AR == NULL){
  28. // Falló la asignación de memoria.
  29. exit (-1);
  30. }
  31. else {  
  32. // Asignar memoria a AR
  33. AR=tmp_AR;
  34. }
  35. i++;
  36. }
  37.  
  38. printf ("Average: %f\n",(double)promedio);
  39.  
  40.  
  41.  
  42.  
  43. return 0;
  44. }

Me tira este error : Error in `./12': realloc(): invalid next size: 0x0000000001a63010 ***

Y encima después me acepta numeros negativos no entiendo por qué

¿Cómo lo debería hacer?
Saludos!


En línea

LET'S DO STUFF!!
GGZ

Desconectado Desconectado

Mensajes: 144



Ver Perfil
Re: [C] Memoria dinámica. Malloc, Realloc
« Respuesta #1 en: 19 Noviembre 2015, 01:44 am »

Código
  1. /*
  2. Escribir un programa que lea enteros y los almacene en un arreglo
  3. sin conocer de antemano la cantidad de valores que se leerán.
  4. El programa deberá completar el arreglo hasta que se ingrese un número negativo,
  5. valor que no se agregará a la mencionada estructura de datos. Finalmente deberá imprimir
  6. el promedio de los elementos del arreglo.
  7. */
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11.  
  12.  
  13. int main (void){
  14. int promedio;
  15. int i;
  16. int *AR=malloc(1*sizeof(int));
  17. int *AR_tmp;
  18.  
  19. i=promedio=0;
  20.  
  21.  
  22. printf ("Introduce un numero positivo: \n");
  23. scanf ("%d",&AR[i]);
  24.  
  25.  
  26. while (AR[i]>=0){
  27. promedio+=AR[i];
  28. i++;
  29. AR_tmp = realloc(AR, (1+i) * sizeof(int));
  30. if (AR_tmp==NULL){free(AR_tmp); exit(1);}
  31.  
  32. AR=AR_tmp;
  33. // Ya no lo necesitamos.
  34. AR_tmp=NULL;
  35. scanf ("%d",&AR[i]);
  36. printf ("Tamaño de a: %lu\n",sizeof(AR));
  37. }
  38. printf ("Promedio: %f\n",(double)promedio/(i));
  39.  
  40. free(AR);
  41.  
  42.  
  43. return 0;
  44. }

Listo!


En línea

LET'S DO STUFF!!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines