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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


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

Desconectado Desconectado

Mensajes: 87


Ver Perfil
Duda con memoria dinámica y arrays
« en: 6 Septiembre 2015, 17:22 pm »

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
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[])
  4. {
  5. int array[100];
  6.  
  7. printf("%i", sizeof(array));
  8. getch();
  9. return 0;
  10. }
  11.  

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
  1.        int *array = (int*)malloc(400);
  2.  

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.


En línea

T. Collins

Desconectado Desconectado

Mensajes: 206


Ver Perfil
Re: Duda con memoria dinámica y arrays
« Respuesta #1 en: 6 Septiembre 2015, 17:48 pm »

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.


En línea

Bob1098

Desconectado Desconectado

Mensajes: 87


Ver Perfil
Re: Duda con memoria dinámica y arrays
« Respuesta #2 en: 6 Septiembre 2015, 18:01 pm »

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

T. Collins

Desconectado Desconectado

Mensajes: 206


Ver Perfil
Re: Duda con memoria dinámica y arrays
« Respuesta #3 en: 6 Septiembre 2015, 18:11 pm »

Sí.
En línea

Bob1098

Desconectado Desconectado

Mensajes: 87


Ver Perfil
Re: Duda con memoria dinámica y arrays
« Respuesta #4 en: 6 Septiembre 2015, 22:04 pm »

Vale, gracias por resolver mis dudas. Un saludo!
En línea

furciorifa

Desconectado Desconectado

Mensajes: 94


Ver Perfil
Re: Duda con memoria dinámica y arrays
« Respuesta #5 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
En línea

Bob1098

Desconectado Desconectado

Mensajes: 87


Ver Perfil
Re: Duda con memoria dinámica y arrays
« Respuesta #6 en: 7 Septiembre 2015, 18:47 pm »

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.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[DUDA] Memoria Dinámica en C++
Programación C/C++
Zodiak98 3 2,589 Último mensaje 5 Junio 2013, 18:48 pm
por Zodiak98
Duda Memoria Dinamica
Programación C/C++
Pepe2009 6 3,178 Último mensaje 13 Agosto 2013, 17:59 pm
por Pepe2009
Duda sobre memoria dinamica C++
Programación C/C++
erest0r 6 3,911 Último mensaje 11 Septiembre 2013, 09:34 am
por erest0r
Duda con memoria dinamica
Programación C/C++
Ja_90 2 1,772 Último mensaje 20 Octubre 2015, 19:17 pm
por Ja_90
[C] (Consulta) Duda cuando un programa en C termina y memoria dinámica
Programación C/C++
class_OpenGL 4 2,491 Último mensaje 29 Mayo 2016, 21:19 pm
por class_OpenGL
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines