Está en la página 1de 6

Código fuente pt18

#include<stdio.h>

#include<stdlib.h>

int main() {

int i;

int dato;

double *ptr ;

ptr = (double *) malloc(500 * sizeof (double) );

if (ptr == NULL)

printf ("No hay memoria \ n");

exit (1);

for ( i=0; i <500; i=i+1) {

ptr[i] = i+10; // valor de i

dato= (i)*( sizeof(*ptr) );

printf("\n imprimir valor i= %d ",i);

printf("\n imprimir dato i*(2,4,8)bytes= %d ",dato);

printf("\n imprimir size ptr = %d ",sizeof(*ptr));

}
Ejecución del programa

i = contiene un contador desde 1 hasta 500 en el for

i*(2,4,8) bytes = es el tamano, es decir 2 si es int ,4 si es float, 8 si es de doble presicion, bytes


por 500 elementos = 4000

y por último el size del prt (puntero) es de 8 bytes


Código fuente pt20

#include <stdio.h>

int main() {

int *vect1, n;

int *vect2;

printf("Numero de elementos del vector: ");

scanf("%d", &n); /* Reservar memoria para almacenar n enteros */

vect1 = calloc (n, sizeof(int) );

vect2 = malloc (n, sizeof(int) ); // cual es la diferencia ??

/* Verificamos que la asignación se haya realizado correctamente */

if (vect1 == NULL) {

printf ("%d No hay memoria disponible para el valor de n= \n", n);

exit (1);

printf("\n imprimir(n) %d", n); /* Print size of structure */

printf("\n imprimir sizeof(vect1=calloc) %d", n*(sizeof(vect1) ) );

printf("\n imprimir sizeof(vect2=malloc) %d", n*(sizeof(vect2) ) );

printf("\n calloc= iniciariza variable %d", vect1[2] );

printf("\n calloc= iniciariza variable %d", vect1[3] );

printf("\n malloc= iniciariza variable %d", vect2[2] );

printf("\n malloc= iniciariza variable %d", vect2[3] );

printf("\n liberamos la memoria free(vect1,vect2) ");

free(vect1);

free(vect2);

return 0;

getch();

}
Ejecución de programa

Pedimos al usuario la cantidad de elementos del vector que desea almacenar, calculamos el
espacio de memoria que necesitaremos una con malloc y otra con calloc, imprime el tamaño
que almacenan, y luego volvemos a imprimir su contenido en diferentes posiciones del vector
donde se puede observar como calloc inicializa la variable en 0 y malloc arroja resultado basura
y al final liberamos la memoria.
Código fuente pt21

#include <stdio.h>

int main() {

// programa pt21.c

int *vect1, n; // ejemplo reservo 5 bytes

int *tmp_ptr ; // puntero temporal, utilizar realloc

printf("Numero de elementos del vector: ");

scanf("%d", &n); /* Reservar memoria para almacenar n enteros */

vect1 = (int *) malloc(n, sizeof(int) );

tmp_ptr= (int *) realloc(vect1,(n+5) ); // redimensiono a n+5

/* Verificamos que la asignación se haya realizado correctamente */

if (tmp_ptr == NULL) {

printf ("%d No hay memoria disponible para el valor de n= \n", n);

else { /* Reasignación exitosa. Asignar memoria a ptr */

vect1= tmp_ptr;

printf("\n imprimir(n) %d", n); /* Print size of structure */

printf("\n imprimir sizeof(vect1=malloc) %d", n*(sizeof(vect1) ) );

printf("\n imprimir sizeof(tmp_ptr=realloc) %d", *tmp_ptr );

printf("\n liberamos la memoria free(vect1,vect2) ");

free(vect1);

return 0;

getch();

}
Ejecución del programa

Usamos la función realloc que redimensiona el espacio asignado de forma dinámica


anteriormente a un puntero. Donde ptr es el puntero a redimensionar, y size el nuevo tamaño,
en bytes, que tendrá. Si el puntero que se le pasa tiene el valor nulo, esta función actúa como
malloc.

También podría gustarte