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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Solucionado] -> [Ayuda] Saber el indice mayor de una rreglo (Cual sea)..
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Solucionado] -> [Ayuda] Saber el indice mayor de una rreglo (Cual sea)..  (Leído 2,833 veces)
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
[Solucionado] -> [Ayuda] Saber el indice mayor de una rreglo (Cual sea)..
« en: 31 Octubre 2010, 02:07 am »

.
El siguiente codigo me carga el maximo indice que es 1 cuando yo se que es 2000... cual es mi error?

Código
  1.  
  2. int *arreglo = new int[];
  3. int i = 2000;
  4. arreglo = (int*) malloc (i * sizeof(int));
  5. ::cout << ubound(arreglo) << ::endl;
  6. free(arreglo);
  7. getchar();
  8.  
  9.  

Codigo de Ubound()

Código
  1.  
  2. unsigned long __stdcall ubound (int *arr) {
  3. return(sizeof(arr) / sizeof(arr[0]));
  4. }
  5.  
  6.  

Dulce Lunas!¡.

Lh: No hagas doble post. Utiliza el botón modificar.

.
Despues de mucho probar y probar di con la solucion...

Código
  1.  
  2. #define ubound(arr) ((sizeof(arr))/(sizeof(*arr)))
  3.  
  4.  

Dulce Infierno Lunar!¡.


« Última modificación: 31 Octubre 2010, 13:34 pm por Littlehorse » En línea

The Dark Shadow is my passion.
Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: [Solucionado] -> [Ayuda] Saber el indice mayor de una rreglo (Cual sea)..
« Respuesta #1 en: 31 Octubre 2010, 14:32 pm »

Esta mal, de hecho es imposible que eso te funcione.

Lo primero, estas mezclando new y malloc sin sentido. Esta linea no tiene sentido:

Código
  1. int *arreglo = new int[];

New



Lo segundo, sizeof es un operador que funciona en tiempo de compilación, por tanto es imposible que sepas de esa forma cual es el tamaño del arreglo dado que las llamadas de reserva de memoria se hacen en tiempo de ejecución.

Lo que estas haciendo con ese macro es basicamente algo como "Tamaño del puntero/tamaño del primer elemento del arreglo" entonces por ejemplo puntero=4 bytes, entero=4bytes. 4/4=1.

Tu macro funcionaria solamente con los arreglos estáticos, algo así:

Código
  1. int arreglo[2000];
  2. cout<<sizeof arreglo/sizeof(int);
  3.  

Y en ese caso sizeof devolvería, por ejemplo, algo como 8000/4=2000.

En el caso de los arreglos de enteros dinámicos, no hay manera portable de saber el tamaño salvo utilizando funciones especificas del sistema u manteniendo el tamaño en alguna variable/constante/define etc.


Saludos!


« Última modificación: 31 Octubre 2010, 14:35 pm por Littlehorse » En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Cual es vuestra mayor frikada (con perdon) con el ordenador? « 1 2 3 4 »
Foro Libre
crazykenny 32 15,580 Último mensaje 30 Octubre 2017, 02:30 am
por Tobi_Emotic
Las 10 ciudades europeas con mayor índice de ciberdelincuencia
Noticias
wolfbcn 0 1,750 Último mensaje 14 Marzo 2012, 17:52 pm
por wolfbcn
Ayuda sobre indice Alfa de Crombach
Foro Libre
Nav 21 0 2,089 Último mensaje 12 Noviembre 2012, 02:54 am
por Nav 21
Busqueda por indice (Solucionado)
Programación C/C++
nolasco281 7 3,151 Último mensaje 28 Abril 2014, 00:51 am
por nolasco281
Repetidor wifi de mayor potencia. ¿Como saber cual es mejor?
Wireless en Windows
nichihack 3 2,815 Último mensaje 18 Agosto 2018, 21:13 pm
por orion999
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines