Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: BlackZeroX en 31 Octubre 2010, 02:07 am



Título: [Solucionado] -> [Ayuda] Saber el indice mayor de una rreglo (Cual sea)..
Publicado por: BlackZeroX 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!¡.


Título: Re: [Solucionado] -> [Ayuda] Saber el indice mayor de una rreglo (Cual sea)..
Publicado por: Littlehorse 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 (http://www.cplusplus.com/reference/std/new/operator%20new%5B%5D/)



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!