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)
| | |-+  [Ayuda] Error con delete[]... algo extraño...
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda] Error con delete[]... algo extraño...  (Leído 7,561 veces)
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
[Ayuda] Error con delete[]... algo extraño...
« en: 7 Julio 2011, 23:33 pm »

.
Intento Re-Crear el Redim Preserve de VB6 todo bien pero Cuando deseo volver a redimencionar Crashea alguien sabe por que?

Código
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. void** RedimPreserve( void** __pp_vector , size_t _szt_now, size_t _szt_new )
  6. {
  7.    void            **__pp_back     = __pp_vector;
  8.    void            **__new_ptr     = NULL;
  9.  
  10.    if (_szt_now==_szt_new )
  11.        return __pp_vector;
  12.  
  13.    if ( _szt_new>0 ) {
  14.        __new_ptr       = new void*[_szt_new];
  15.        if ( _szt_now>0 && __new_ptr!=NULL && __pp_back!=NULL  )
  16.            memcpy          ( __new_ptr , __pp_back , _szt_now*sizeof(void*) );
  17.    } else
  18.        __new_ptr       = NULL;
  19.  
  20.    if ( __pp_back!=NULL )
  21.        delete[]        __pp_back;
  22.  
  23.    return __new_ptr;
  24. }
  25.  
  26.  
  27.  
  28. int main () {
  29.    char **_msg = NULL;
  30.  
  31.    _msg    = (char**)RedimPreserve( (void**)_msg , 00 , 10 );
  32.    _msg    = (char**)RedimPreserve( (void**)_msg , 10 , 11 );
  33.    _msg    = (char**)RedimPreserve( (void**)_msg , 11 , 10 );
  34.    _msg    = (char**)RedimPreserve( (void**)_msg , 10 , 00 );
  35.    _msg    = (char**)RedimPreserve( (void**)_msg , 00 , 13 );
  36.    _msg    = (char**)RedimPreserve( (void**)_msg , 13 , 20 );
  37.    delete[] _msg;
  38.    return 0;
  39. }
  40.  
  41.  

Dulces Lunas!¡


« Última modificación: 8 Julio 2011, 00:30 am por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: [Ayuda] Error con delete[]... algo extraño...
« Respuesta #1 en: 7 Julio 2011, 23:50 pm »

Código
  1. if ( _szt_new>0 ) {
  2.        __new_ptr       = new void*[_szt_new];
  3.        memcpy          ( __new_ptr , __pp_back , _szt_now*sizeof(void*) );
  4.    }

Será porque en el momento en que _szt_new sea menor a _szt_now (lo cual sucede en alguna instrucción del main), estarías pidiendo una memoria menor a la necesaria para realizar el memcpy?

EDIT: Ahora que veo decís que crashea en el delete[], no pensé en eso.


En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [Ayuda] Error con delete[]... algo extraño...
« Respuesta #2 en: 8 Julio 2011, 00:30 am »

.
Edito ya esta corregido:

Código
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. void** RedimPreserve( void** __pp_vector , size_t _szt_now, size_t _szt_new )
  6. {
  7.    void            **__pp_back     = __pp_vector;
  8.    void            **__new_ptr     = NULL;
  9.  
  10.    if (_szt_now==_szt_new )
  11.        return __pp_vector;
  12.  
  13.    if ( _szt_new>0 ) {
  14.        __new_ptr       = new void*[_szt_new];
  15.        if ( _szt_now>0 && __new_ptr!=NULL && __pp_back!=NULL  )
  16.            if ( _szt_now>_szt_new )
  17.                memcpy          ( __new_ptr , __pp_back , _szt_new*sizeof(void*) );
  18.            else
  19.                memcpy          ( __new_ptr , __pp_back , _szt_now*sizeof(void*) );
  20.    } else
  21.        __new_ptr       = NULL;
  22.  
  23.    if ( __pp_back!=NULL )
  24.        delete[]        __pp_back;
  25.  
  26.    return __new_ptr;
  27. }
  28.  
  29.  
  30.  
  31. int main () {
  32.    char **_msg = NULL;
  33.  
  34.    _msg    = (char**)RedimPreserve( (void**)_msg , 00 , 10 );
  35.    _msg    = (char**)RedimPreserve( (void**)_msg , 10 , 11 );
  36.    _msg    = (char**)RedimPreserve( (void**)_msg , 11 , 10 );
  37.    _msg    = (char**)RedimPreserve( (void**)_msg , 10 , 00 );
  38.    _msg    = (char**)RedimPreserve( (void**)_msg , 00 , 13 );
  39.    _msg    = (char**)RedimPreserve( (void**)_msg , 13 , 20 );
  40.    delete[] _msg;
  41.    return 0;
  42. }
  43.  
  44.  

Dulces Lunas!¡.
« Última modificación: 8 Julio 2011, 00:35 am por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: [Ayuda] Error con delete[]... algo extraño...
« Respuesta #3 en: 8 Julio 2011, 00:40 am »

No, no me entendiste. Yo digo en el caso (es el tercer caso en tu main) en el que _szt_now (11) es mayor a _szt_new (10), por ende, en:
Código
  1. __new_ptr       = new void*[_szt_new];

estás pidiendo determinada cantidad de memoria.
Pero en:

Código
  1. memcpy          ( __new_ptr , __pp_back , _szt_now*sizeof(void*) );

estás copiando aún más memoria que la que pediste para __new_ptr.
Fijate que borrando el tercer caso, el programa funciona perfecto.
« Última modificación: 8 Julio 2011, 00:46 am por Ferno » En línea

d(-_-)b


Desconectado Desconectado

Mensajes: 1.331



Ver Perfil WWW
Re: [Ayuda] Error con delete[]... algo extraño...
« Respuesta #4 en: 8 Julio 2011, 00:42 am »

Es la leche, ¿porque hay que escribir codigo tan feo?  :xD

Hablando en serio, es incomodo leer codigos asi ¬¬

saludos... :xD
« Última modificación: 8 Julio 2011, 00:43 am por Slow V.S. » En línea

Max 400; caracteres restantes: 366
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [Ayuda] Error con delete[]... algo extraño...
« Respuesta #5 en: 8 Julio 2011, 01:21 am »

@Ferno.

Claro que te entend, de hecho por eso meti estos if

Muchas gracias.

Código
  1.  
  2.        if ( _szt_now>0 && __new_ptr!=NULL && __pp_back!=NULL  )
  3.            if ( _szt_now>_szt_new )
  4.                memcpy          ( __new_ptr , __pp_back , _szt_new*sizeof(void*));
  5.            else
  6.                memcpy          ( __new_ptr , __pp_back , _szt_now*sizeof(void*))
  7.  
  8.  

por otro lado:

@Slow V.S.
para joderte la vida, para eso hay que escribirlo asi.

P.D.: Tengo mi propia nomeclatura para los prefijos que me hacen leer mis codigos facilmente.

Dulces Lunas!¡.
« Última modificación: 8 Julio 2011, 01:37 am por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
d(-_-)b


Desconectado Desconectado

Mensajes: 1.331



Ver Perfil WWW
Re: [Ayuda] Error con delete[]... algo extraño...
« Respuesta #6 en: 8 Julio 2011, 06:14 am »

Citar
@Slow V.S.
para joderte la vida, para eso hay que escribirlo asi.

Tu crees ?

Excelente

En línea

Max 400; caracteres restantes: 366
Karman


Desconectado Desconectado

Mensajes: 673



Ver Perfil WWW
Re: [Ayuda] Error con delete[]... algo extraño...
« Respuesta #7 en: 12 Julio 2011, 22:59 pm »

Tu crees ?

Excelente


Juaz! me causó gracia :P

S2
En línea

Valkyr


Desconectado Desconectado

Mensajes: 646


Divide y vencerás


Ver Perfil
Re: [Ayuda] Error con delete[]... algo extraño...
« Respuesta #8 en: 13 Julio 2011, 00:53 am »

La verdad que es un poco tediosa la nomenclatura, pero bueno, cada cual que programe a su gusto, eso sí, no me gustaría tener que continuar un código que tu empezaste xD y lo digo sin mala intención y sin ánimo de burla.

Saludos.
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [Ayuda] Error con delete[]... algo extraño...
« Respuesta #9 en: 13 Julio 2011, 23:45 pm »

En que sentido es tediosa? me gustaria saber.

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Delete ITEM
Programación Visual Basic
NetWar 5 2,514 Último mensaje 24 Marzo 2008, 12:17 pm
por jmordenata
SOLUCIONADO: Delete en mysql
Bases de Datos
mk_137 0 3,238 Último mensaje 28 Diciembre 2010, 13:24 pm
por mk_137
DELETE de resultado de un SELECT
Bases de Datos
XafiloX 4 7,629 Último mensaje 11 Febrero 2011, 18:21 pm
por XafiloX
para mi fue algo extraño en la recepción de un correo outlook 2010
Seguridad
Platanito Mx 8 3,990 Último mensaje 14 Julio 2016, 17:19 pm
por Platanito Mx
(ayuda) Operadores new y delete
Programación C/C++
TheZeck 3 1,910 Último mensaje 29 Julio 2016, 16:26 pm
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines