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


 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  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 1,654 veces)
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 3.128


I'Love...!¡.


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

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




CScript (Actualizado 26/06/2013).

FileX <-- Re-modelando...
Web Principal-->[ Blog(VB6/C/C++) | Host File | Scan Port) ]

The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilit y el metal mi relig
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 »

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

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines