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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Arreglo con memoria dinámica en lenguaje C.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Arreglo con memoria dinámica en lenguaje C.  (Leído 5,304 veces)
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Arreglo con memoria dinámica en lenguaje C.
« Respuesta #10 en: 25 Mayo 2016, 22:59 pm »

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAX 150
  5. #define TABLA 5
  6.  
  7. int main( void ){
  8. size_t i=1;
  9. int *ptr = (int*)malloc(MAX * sizeof(int));
  10.  
  11. while( i<=MAX ){
  12. ptr[i] = i*TABLA;
  13. printf( "\n %2lu x %d = %2d", i, TABLA, ptr[i] );
  14. i++;
  15. }
  16.  
  17. free(ptr);
  18.  
  19. return 0;
  20. }


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
geeke

Desconectado Desconectado

Mensajes: 93


Ver Perfil
Re: Arreglo con memoria dinámica en lenguaje C.
« Respuesta #11 en: 25 Mayo 2016, 23:04 pm »

Código
  1. while( i <= MAX )

Estas accediendo fuera de los límites del array con <= cambialo por < o reservar size + 1


« Última modificación: 25 Mayo 2016, 23:07 pm por geeke » En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Arreglo con memoria dinámica en lenguaje C.
« Respuesta #12 en: 25 Mayo 2016, 23:19 pm »

¿Es esta la manera correcta?, ya no me da error, estas en lo cierto.

Código
  1. int *ptr = (int*)malloc(MAX * sizeof(int)+1);
  2.  


Esta parece mas correcta.-
Código
  1. int *ptr = (int*)malloc((MAX+1) * sizeof(int));


Saludos.
« Última modificación: 25 Mayo 2016, 23:45 pm por NOB2014 » En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Arreglo con memoria dinámica en lenguaje C.
« Respuesta #13 en: 26 Mayo 2016, 02:51 am »

Muy bien por lo visto estas haciendo una "Tabla" de multiplicar.

Se puede abordar como lo solucionaste. Sin embargo en tu ejemplo queda sin utilizar el elemento 0 de tu arreglo.

Por ejemplo (Un remoto pero posible caso) si vas a guardar en archivo el arreglo

Usando
Código
  1. fwrite(ptr,sizeof(int),MAX,archivo);

Guardarias un ITEM basura (el primero) y omitirias el ultimo
Enonces mejor empezar en el elemento 0 y usar menor que en la comparacion en el while y adicional agregar + 1 en la multiplicación.


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAX 150
  5. #define TABLA 5
  6.  
  7. int main( void ){
  8. size_t i=0;
  9. int *ptr = (int*)malloc(MAX * sizeof(int));
  10.  
  11. while( i<MAX ){
  12. ptr[i] = (i+1)*TABLA;
  13. printf( "\n %2lu x %d = %2d", i+1, TABLA, ptr[i] );
  14. i++;
  15. }
  16. free(ptr);
  17. return 0;
  18. }

Saludos.
En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Arreglo con memoria dinámica en lenguaje C.
« Respuesta #14 en: 26 Mayo 2016, 03:11 am »

Hola, Alberto. -
Gracias por tu tiempo, realmente te agradezco porque creí que nadie ya me iba a decir si era correcto o no mi solución (muchos en España estarán durmiendo 3:14 de la madrugada), funciona a la perfección y me ayudaste a entender un poco más los arreglos. -

Un abrazo.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

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