Arreglo con memoria dinámica en lenguaje C.

Iniciado por NOB2014, 24 Mayo 2016, 19:45 PM

0 Miembros y 1 Visitante están viendo este tema.

NOB2014

#include <stdio.h>
#include <stdlib.h>

#define MAX 150
#define TABLA 5

int main( void ){
size_t i=1;
int *ptr = (int*)malloc(MAX * sizeof(int));

while( i<=MAX ){
ptr[i] = i*TABLA;
printf( "\n %2lu x %d = %2d", i, TABLA, ptr[i] );
i++;
}

free(ptr);

return 0;
}
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

#11
while( i <= MAX )

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

NOB2014

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

int *ptr = (int*)malloc(MAX * sizeof(int)+1);


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


Saludos.
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

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
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.


#include <stdio.h>
#include <stdlib.h>

#define MAX 150
#define TABLA 5

int main( void ){
size_t i=0;
int *ptr = (int*)malloc(MAX * sizeof(int));

while( i<MAX ){
ptr[i] = (i+1)*TABLA;
printf( "\n %2lu x %d = %2d", i+1, TABLA, ptr[i] );
i++;
}
free(ptr);
return 0;
}


Saludos.
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

NOB2014

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.
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.-