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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [SOLUCIONADO] Problema con punteros como argumentos.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO] Problema con punteros como argumentos.  (Leído 2,618 veces)
APOKLIPTICO


Desconectado Desconectado

Mensajes: 3.871


Toys in the attic.


Ver Perfil
[SOLUCIONADO] Problema con punteros como argumentos.
« en: 21 Diciembre 2010, 03:36 am »

Hola gente, como anda todo?
Miren, tengo un problema que le vengo dando vueltas hace bastante y no se como hacer para resolverlo.

Declaré un puntero tipo unsigned long, y lo pasé a una función. En esa función, utilizando el operador new, cree un array de unsigned longs y los llené de ceros con ZeroMemory.
Luego trabajé con dicho puntero, ahora, cuando quiero utilizar el array inicial (utilizando el puntero), no me deja, parece como si la memoria jamás hubiese sido allocada.

Este es el código en cuestión:
Código
  1. int main()
  2. {
  3.    unsigned long *Arg1= 0, *Arg2= 0;
  4.    Precalc(24,20, Arg1, Arg2);
  5.    cout << (int) Arg1<< endl << (int) Arg1<< endl;
  6.    return 0;
  7. }
  8.  
  9. void Precalc(unsigned int inbits, unsigned int outbits, unsigned long *Arg1, unsigned long *Arg2)
  10. {
  11.    unsigned long iSpace = pow(2, inbits);
  12.    unsigned long ideSpace = pow(2, outbits);
  13.    unsigned long nModulus = pow(2, inbits);
  14.    Arg1= new unsigned long[iSpace];
  15.    Arg2= new unsigned long[ideSpace];
  16.    if(!Arg1|| !Arg2) return;
  17.    ZeroMemory(Arg1, iSpace*4);
  18.    ZeroMemory(Arg2, ideSpace*4);
  19.    //Más código donde se modifican los arrays Arg1 y Arg2
  20. }
  21.  

Esto devuelve "0" y "0". Si trato de trabajar con los arrays afuera de las funciones, me da un error de segmentación (Null pointer).

Alguien sabe que sucede??
Muchas gracias!
APOKLIPTICO


« Última modificación: 21 Diciembre 2010, 14:18 pm por APOKLIPTICO » En línea

AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
pucheto

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: Problema con punteros como argumentos.
« Respuesta #1 en: 21 Diciembre 2010, 03:53 am »

Código
  1. void Precalc(unsigned int inbits, unsigned int outbits, unsigned long* &Arg1, unsigned long* &Arg2)
  2. {
  3.    unsigned long iSpace = pow(2, inbits);
  4.    unsigned long ideSpace = pow(2, outbits);
  5.    unsigned long nModulus = pow(2, inbits);
  6.    Arg1= new unsigned long[iSpace];
  7.    Arg2= new unsigned long[ideSpace];
  8.    if(!Arg1|| !Arg2) return;
  9.    ZeroMemory(Arg1, iSpace*4);
  10.    ZeroMemory(Arg2, ideSpace*4);
  11.    //Más código donde se modifican los arrays Arg1 y Arg2
  12. }
  13.  
Lo que vos queres pasarle a tu funcion es una referencia a puntero o un puntero a puntero... estas pasando el puntero por copia, entonces cuando sale de la funcion la copia (que es lo q modificaste) desaparece.


« Última modificación: 21 Diciembre 2010, 03:55 am por pucheto » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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