Autor
|
Tema: [Ayuda] Error con delete[]... algo extraño... (Leído 7,409 veces)
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
. Intento Re-Crear el Redim Preserve de VB6 todo bien pero Cuando deseo volver a redimencionar Crashea alguien sabe por que? #include <stdio.h> #include <string.h> void** RedimPreserve( void** __pp_vector , size_t _szt_now, size_t _szt_new ) { void **__pp_back = __pp_vector; void **__new_ptr = NULL; if (_szt_now==_szt_new ) return __pp_vector; if ( _szt_new>0 ) { __new_ptr = new void*[_szt_new]; if ( _szt_now>0 && __new_ptr!=NULL && __pp_back!=NULL ) memcpy ( __new_ptr , __pp_back , _szt_now*sizeof(void*) ); } else __new_ptr = NULL; if ( __pp_back!=NULL ) delete[] __pp_back; return __new_ptr; } int main () { char **_msg = NULL; _msg = (char**)RedimPreserve( (void**)_msg , 00 , 10 ); _msg = (char**)RedimPreserve( (void**)_msg , 10 , 11 ); _msg = (char**)RedimPreserve( (void**)_msg , 11 , 10 ); _msg = (char**)RedimPreserve( (void**)_msg , 10 , 00 ); _msg = (char**)RedimPreserve( (void**)_msg , 00 , 13 ); _msg = (char**)RedimPreserve( (void**)_msg , 13 , 20 ); delete[] _msg; return 0; }
Dulces Lunas!¡
|
|
« Última modificación: 8 Julio 2011, 00:30 am por BlackZeroX▓▓▒▒░░ »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
Ferno
Desconectado
Mensajes: 375
|
if ( _szt_new>0 ) { __new_ptr = new void*[_szt_new]; memcpy ( __new_ptr , __pp_back , _szt_now*sizeof(void*) ); }
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
Mensajes: 3.158
I'Love...!¡.
|
. Edito ya esta corregido: #include <stdio.h> #include <string.h> void** RedimPreserve( void** __pp_vector , size_t _szt_now, size_t _szt_new ) { void **__pp_back = __pp_vector; void **__new_ptr = NULL; if (_szt_now==_szt_new ) return __pp_vector; if ( _szt_new>0 ) { __new_ptr = new void*[_szt_new]; if ( _szt_now>0 && __new_ptr!=NULL && __pp_back!=NULL ) if ( _szt_now>_szt_new ) memcpy ( __new_ptr , __pp_back , _szt_new*sizeof(void*) ); else memcpy ( __new_ptr , __pp_back , _szt_now*sizeof(void*) ); } else __new_ptr = NULL; if ( __pp_back!=NULL ) delete[] __pp_back; return __new_ptr; } int main () { char **_msg = NULL; _msg = (char**)RedimPreserve( (void**)_msg , 00 , 10 ); _msg = (char**)RedimPreserve( (void**)_msg , 10 , 11 ); _msg = (char**)RedimPreserve( (void**)_msg , 11 , 10 ); _msg = (char**)RedimPreserve( (void**)_msg , 10 , 00 ); _msg = (char**)RedimPreserve( (void**)_msg , 00 , 13 ); _msg = (char**)RedimPreserve( (void**)_msg , 13 , 20 ); delete[] _msg; return 0; }
Dulces Lunas!¡.
|
|
« Última modificación: 8 Julio 2011, 00:35 am por BlackZeroX▓▓▒▒░░ »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
Ferno
Desconectado
Mensajes: 375
|
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: __new_ptr = new void*[_szt_new];
estás pidiendo determinada cantidad de memoria. Pero en: 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
|
Es la leche, ¿porque hay que escribir codigo tan feo? Hablando en serio, es incomodo leer codigos asi ¬¬ saludos...
|
|
« Última modificación: 8 Julio 2011, 00:43 am por Slow V.S. »
|
En línea
|
Max 400; caracteres restantes: 366
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
@Ferno. Claro que te entend, de hecho por eso meti estos if Muchas gracias. if ( _szt_now>0 && __new_ptr!=NULL && __pp_back!=NULL ) if ( _szt_now>_szt_new ) memcpy ( __new_ptr , __pp_back , _szt_new*sizeof(void*)); else memcpy ( __new_ptr , __pp_back , _szt_now*sizeof(void*))
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
|
@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
|
Tu crees ? Excelente Juaz! me causó gracia S2
|
|
|
En línea
|
|
|
|
Valkyr
Desconectado
Mensajes: 646
Divide y vencerás
|
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
Mensajes: 3.158
I'Love...!¡.
|
En que sentido es tediosa? me gustaria saber.
Dulces Lunas!¡.
|
|
|
En línea
|
The Dark Shadow is my passion.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Delete ITEM
Programación Visual Basic
|
NetWar
|
5
|
2,495
|
24 Marzo 2008, 12:17 pm
por jmordenata
|
|
|
SOLUCIONADO: Delete en mysql
Bases de Datos
|
mk_137
|
0
|
3,233
|
28 Diciembre 2010, 13:24 pm
por mk_137
|
|
|
DELETE de resultado de un SELECT
Bases de Datos
|
XafiloX
|
4
|
7,619
|
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,946
|
14 Julio 2016, 17:19 pm
por Platanito Mx
|
|
|
(ayuda) Operadores new y delete
Programación C/C++
|
TheZeck
|
3
|
1,881
|
29 Julio 2016, 16:26 pm
por engel lex
|
|