• Viernes 8 de Noviembre de 2024, 19:11

Autor Tema:  New Y Delete  (Leído 1420 veces)

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
New Y Delete
« en: Sábado 30 de Septiembre de 2006, 21:26 »
0
Tengo el siguiente problema, no puedo manejar bien el tema de aritmetica de punteros como lo hacia en C. Alguien me dice donde esta el problema?

Código: Text
  1. #include<iostream>
  2.  
  3. void main() {
  4.   int *p;
  5.   int *pa;
  6.   int aux;
  7.  
  8.   p = new int;
  9.   pa = new int[10];
  10.  
  11.   *p = 2;
  12.  
  13.  
  14.   for(aux = 0; aux < 10;aux++) {
  15.     *pa = aux;
  16.     pa++;
  17.   }
  18.  
  19.   for(aux = 0; aux < 10;aux++) {
  20.     cout << endl << "pa = " << *pa;
  21.     pa++;
  22.   }
  23.  
  24.   cout << endl << "p = " << *p;
  25.  
  26.   delete p;
  27.   delete [10]pa;
  28.  
  29.   cout << endl << "Presione una tecla para salir";
  30.   cin.get();
  31. }
  32.  

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: New Y Delete
« Respuesta #1 en: Sábado 30 de Septiembre de 2006, 21:43 »
0
Esto no parece tener que ver nada con C++ ... proba cambiando eso por malloc/free ... estas incrementando pa y despues queres recorrerlo pero ya no tenes la direccion inicial ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: New Y Delete
« Respuesta #2 en: Sábado 30 de Septiembre de 2006, 21:56 »
0
si, es verdad. Pero puede ser qe se mismo codigo con malloc y free funcione?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: New Y Delete
« Respuesta #3 en: Sábado 30 de Septiembre de 2006, 22:13 »
0
Cita de: "AnioN"
si, es verdad. Pero puede ser qe se mismo codigo con malloc y free funcione?
No ... si estas leyendo una direccion incorrecta ... new y delete solo tienen diferencias si los usas con objetos, para tipos primitivos es lo mismo.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: New Y Delete
« Respuesta #4 en: Domingo 1 de Octubre de 2006, 00:29 »
0
Como dice Eternal Idol, ese código tampoco debe funcionar con malloc.

Es simple, reservas memoria para 10 enteros, entonces pa apunta al primero de ellos y puedes recorrerlos con pa[indice], pero luego haces pa++, con lo que, para cuando quieres liberar pa ésta ya anda por otro lado y marca un error al intentar liberar los 10 elementos a partir de donde al final apunta pa.

Si realmente quieres hacer algo así, usa dos punteros, así:

Código: Text
  1.  
  2. int* pa;
  3. int* pb;
  4.  
  5. pb = new int[ 10 ];
  6. pa = pb;
  7.  
  8. ...
  9. pa++
  10. ...
  11.  
  12. delete[] pb;
  13.  
  14.  

Saludos,
JJ (Geo).
La imaginación es el límite.
Hardware & Software | Mexchip

Shuank

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Re: New Y Delete
« Respuesta #5 en: Lunes 2 de Octubre de 2006, 15:45 »
0
for(aux = 0; aux < 10;aux++) {
   *pa = aux;
   pa++;
 }

 for(aux = 0; aux < 10;aux++) {
   cout << endl << "pa = " << *pa;
   pa++;
 }

El error esta en el segundo For. Fijate que, el contador de Pa quedo en 9 en el anterior, y despues no lo volver a 0, entonces trata de mostrar el decimo Pa, despues el onceavo, los cuales , no existen.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: New Y Delete
« Respuesta #6 en: Lunes 2 de Octubre de 2006, 16:19 »
0
No me parece que sea necesario explicar lo mismo tres veces ...  :lightsabre:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.