Duda con memoria dinámica y arrays

Iniciado por Bob1098, 6 Septiembre 2015, 17:22 PM

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

Bob1098

Estoy revisando el tema de los punteros y la memoria dinámica en C, y me han surgido algunas dudas. Si declaro un array de int estático de digamos, 100 elementos, y no le doy ningún valor, ese array estará ocupando 400 bytes en la memoria según mi código:

Código (cpp) [Seleccionar]

#include <stdio.h>

int main(int argc, char *argv[])
{
int array[100];

printf("%i", sizeof(array));
getch();
return 0;
}


Es decir independientemente de que el array estático este lleno o no, siempre va ocupar 400 bytes. Ahora bien, supongo que para eso existe la memoria dinámica. Si quiere tener un array que puede tener como máximo 100 elementos, lo puedo hacer con este código:

Código (cpp) [Seleccionar]

       int *array = (int*)malloc(400);


Sin embargo, si quiero averiguar su tamaño en memoria siempre me va a dar 4 bytes, ya que un puntero de tipo int siempre va a ocupar 4 bytes. Entonces, ¿cómo sé que esos 400 bytes solo están reservados y no se están ocupando?

Agradecería una respuesta clara y bien explicada, gracias.

T. Collins

Cuál es la diferencia entre reservados y ocupados? Cuando haces malloc el kernel pone esa cantidad de memoria "a nombre" de tu proceso, digamos que esa memoria le pertenece a tu proceso hasta que la libere. Dentro puede tener lo que tu quieras o simplemente la basura que había anteriormente a que la reservaras.

Un array al final es lo mismo, un puntero al primer elemento.

Bob1098

Lo cual significa que si no conozco el tamaño del array que voy a usar debería usar un puntero dinámico, no?


Bob1098

Vale, gracias por resolver mis dudas. Un saludo!

furciorifa

Trata de hacer un malloc(sizeof(int)*CANTIDAD DE ELEMENTOS DE ARRAY);
para que sea más portable, me refiero a que no en todas las computadoras ni todos los procesadores manejan los enteros del mismo tamaño de bytes, para que tengas cuidado

Bob1098

Cita de: furciorifa en  7 Septiembre 2015, 00:00 AM
Trata de hacer un malloc(sizeof(int)*CANTIDAD DE ELEMENTOS DE ARRAY);
para que sea más portable, me refiero a que no en todas las computadoras ni todos los procesadores manejan los enteros del mismo tamaño de bytes, para que tengas cuidado

Si, en esos aspectos me considero "responsable" siempre que haya que especificar el tamaño en bytes de algún tipo de variable utilizo el operador sizeof por si acaso.