Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: BlackZeroX en 7 Julio 2011, 23:33 pm



Título: [Ayuda] Error con delete[]... algo extraño...
Publicado por: BlackZeroX 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!¡


Título: Re: [Ayuda] Error con delete[]... algo extraño...
Publicado por: Ferno 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.


Título: Re: [Ayuda] Error con delete[]... algo extraño...
Publicado por: BlackZeroX 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!¡.


Título: Re: [Ayuda] Error con delete[]... algo extraño...
Publicado por: Ferno 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.


Título: Re: [Ayuda] Error con delete[]... algo extraño...
Publicado por: d(-_-)b 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


Título: Re: [Ayuda] Error con delete[]... algo extraño...
Publicado por: BlackZeroX 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!¡.


Título: Re: [Ayuda] Error con delete[]... algo extraño...
Publicado por: d(-_-)b en 8 Julio 2011, 06:14 am
Citar
@Slow V.S.
para joderte la vida, para eso hay que escribirlo asi.

Tu crees ?

Excelente

(http://u2.uni.edu.ni/UserFiles/Image/MrBurns.gif)


Título: Re: [Ayuda] Error con delete[]... algo extraño...
Publicado por: Karman en 12 Julio 2011, 22:59 pm
Tu crees ?

Excelente

(http://u2.uni.edu.ni/UserFiles/Image/MrBurns.gif)

Juaz! me causó gracia :P

S2


Título: Re: [Ayuda] Error con delete[]... algo extraño...
Publicado por: Valkyr 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.


Título: Re: [Ayuda] Error con delete[]... algo extraño...
Publicado por: BlackZeroX en 13 Julio 2011, 23:45 pm
En que sentido es tediosa? me gustaria saber.

Dulces Lunas!¡.


Título: Re: [Ayuda] Error con delete[]... algo extraño...
Publicado por: Khronos14 en 14 Julio 2011, 00:02 am
¿Como ves mejor tu código?

Así:

Código
  1. void** RedimPreserve( void** __pp_vector , size_t _szt_now, size_t _szt_new )
  2. {
  3.    void            **__pp_back     = __pp_vector;
  4.    void            **__new_ptr     = NULL;
  5.  
  6.    if (_szt_now==_szt_new )
  7.        return __pp_vector;
  8.  
  9.    if ( _szt_new>0 ) {
  10.        __new_ptr       = new void*[_szt_new];
  11.        if ( _szt_now>0 && __new_ptr!=NULL && __pp_back!=NULL  )
  12.            if ( _szt_now>_szt_new )
  13.                memcpy          ( __new_ptr , __pp_back , _szt_new*sizeof(void*) );
  14.            else
  15.                memcpy          ( __new_ptr , __pp_back , _szt_now*sizeof(void*) );
  16.    } else
  17.        __new_ptr       = NULL;
  18.  
  19.    if ( __pp_back!=NULL )
  20.        delete[]        __pp_back;
  21.  
  22.    return __new_ptr;
  23. }
  24.  

O de esta manera:

Código
  1. void ** RedimPreserve(void ** buff, size_t currentSize, size_t newSize)
  2. {
  3.    void ** currentBuff = buff;
  4.    void ** temp = NULL;
  5.  
  6. if (currentSize == newSize)
  7. return buff;
  8.  
  9. if (newSize > 0)
  10. {
  11. temp = new void*[newSize];
  12. if (currentSize > 0 && temp != NULL && currentBuff != NULL)
  13. if (currentSize > newSize)
  14. memcpy(temp, currentBuff, newSize * sizeof(void*));
  15. else
  16. memcpy(temp, currentBuff, currentSize * sizeof(void*));
  17. }
  18. else
  19. temp = NULL;
  20.  
  21. if (buff != NULL)
  22. delete[] buff;
  23.  
  24. return temp;
  25. }
  26.  

Programar es un arte, y para un programador es un deber escribir buen código y que sea legible por otros.

Saludos.


Título: Re: [Ayuda] Error con delete[]... algo extraño...
Publicado por: d(-_-)b en 14 Julio 2011, 00:33 am
Se nota la diferencia.  :P

saludos...


Título: Re: [Ayuda] Error con delete[]... algo extraño...
Publicado por: BlackZeroX en 14 Julio 2011, 00:47 am
No me gusta declarar variables sin tener prefijos que NO me indiquen que tipo de variables son... es decir me guio en la nomeclatura hungara que de hecho estan hay por algo, es decir, mantenimiento de codigo a corto, media y largo plazo.

Digamoslo de esta manera:

Tienes 40 declaraciones de variables en un proceso X y varias lineas en tu proceso, si les pongo solo nombres sin que digan mucho ( tipo y/o clase ), y se lo doy a otro programador, este ultimo para que modificara solo 3 lineas, el pobre tendria que irse hasta donde estan declaradas las varibales para saber de que tipo son, y tambien para saber si se estan tratando variables tipo <Puntero>, <Puntero a Puntero> o en un caso mas raro saber si son <Punteros a Punteros a Puntero>, seria algo muy tedioso esto la vdd.

temp, Current, etc y si se desea hacer un cast entre tipos distintos, pues tendria el programador que estar transladandose a zonas que no tendria que transladarse a cada instante.

__pp_ <.. Puntero a puntero algunos solo hacen un    pNombreVariable...  yo le pongo los "_" solo para separar esta nomeclatura ( aun que estoy pensando solo realizar esto para los punteros de cualquier tipo... )

_tipo_nombre     otros ->  tipoNombre     ( Como dije estoy pensando en quitar los _ y dejarselo solo a los punteros... )

un ejemplo de lo que digo:

Código
  1.  
  2.    if (_szt_now==_szt_new )
  3.        return __pp_vector;
  4.  
  5.    if ( _szt_new>0 ) {
  6.        __new_ptr       = new void*[_szt_new];
  7.        if ( _szt_now>0 && __new_ptr!=NULL && __pp_back!=NULL  )
  8.            if ( _szt_now>_szt_new )
  9.                memcpy          ( __new_ptr , __pp_back , _szt_new*sizeof(void*) );
  10.            else
  11.                memcpy          ( __new_ptr , __pp_back , _szt_now*sizeof(void*) );
  12.    } else
  13.        __new_ptr       = NULL;
  14.  
  15.    if ( __pp_back!=NULL )
  16.        delete[]        __pp_back;
  17.  
  18.    return __new_ptr;
  19.  
  20.  

y tu codigo:

Código
  1.  
  2. if (currentSize == newSize)  
  3. return buff;
  4.  
  5. if (newSize > 0)
  6. {
  7. temp = new void*[newSize];
  8. if (currentSize > 0 && temp != NULL && currentBuff != NULL)
  9. if (currentSize > newSize)
  10. memcpy(temp, currentBuff, newSize * sizeof(void*));
  11. else
  12. memcpy(temp, currentBuff, currentSize * sizeof(void*));
  13. }
  14. else
  15. temp = NULL;
  16.  
  17. if (buff != NULL)
  18. delete[] buff;
  19.  
  20. return temp;
  21.  
  22.  

Ahora dime de que tipo son cada variable... solo lo sabrias si analizas el codigo pero eso conlleva tiempo... en mi caso si sabes que significan cada prefijo sabes que tipo son sin mayor problema.

otro ejemplo seria detectar errores entre comparaciones de Enteros con signo y enteros sin signo y asi detectar con tan solo ver las variables donde radica el error.

Ej:

Código
  1.  
  2. //Suponiendo que las variables estan perdidas en alguna parte del codigo... pero las variables tienen prefijos...
  3. dwVar  = -1;   // _dw_Var <--- yo lo haria asi pero creo que si quitare los "_"...
  4. //Tendriamos que verificar que dwvar no sea menor a 0 ya que udwvar no acepta numeros negativos... aun que tiene sus equivalencias.
  5. udwvar = dwvar;  //  Se tendria que hacer un casting...   ( -1 == -2147483648 )
  6.  
  7.  

si no tuviera prefijos...

Código
  1.  
  2. //Suponiendo que las variables estan perdidas en alguna parte del codigo... pero las variables tienen prefijos...
  3. // De que tipo es?... vamos a tener que buscar las desgraciadas variables... y esperemos que esten en donde se deberian declarar, si no tendremos que buscar en todo el codigo &#172;&#172;".
  4. Numero1  = -1;
  5. Numero2 = Numero1; //<--- Si aqui genera un error, y no sabemos porque, seguro haremos un casting... pero las variables pueden albergar la misma cantidad? es decir pesa lo mismo en memoria? o tenemos que cambiar el tipo de la variable para que soporte Numero2 a Numero1 y no se puedan bits/bytes(segun sea el caso)?.
  6.  
  7.  

Los codigo de los sitemas Operativos y/o programas variados tienen nomeclaturas similares y no manejan en muchos casos el tipo de declaraciones que aqui Todos han mencionado (Con excepciones claro). seguramente cada empresa de software maneja y/o define una nomeclatura "X" aun que otras pueden usar la nomeclatura recomendada y que mas se usa.

Como has dicho Programar es un arte y debe ser de facil interpretacion sea cual sea el caso...

Nota: A mi nomeclatura solo le he agregado "_" para separar nombre de tipos, y no morir en el intento, aun que no es la misma nomeclatura que se usa en las estructuras y demas debido a los "_" se comprende.

Dulces Lunas!¡.


Título: Re: [Ayuda] Error con delete[]... algo extraño...
Publicado por: Khronos14 en 14 Julio 2011, 00:58 am
Vale, en lo de los tipos de datos tienes razón. De hecho para proyectos grandes, yo también lo hago. En el código que puse tienes 5 variables: newSize, currentSize, buff, currentBuff y temp. Creo que leyendo las variables sabes de que tipo son, excepto temp, el resto no tienen problemas.

A lo que nos referimos con tu código es al uso de __ para nombrar una variable, el uso de tabulaciones para pasar los parámetros a una función, a juntar los operadores con las variables (no lo soporto xD), etc..

Saludos.


Título: Re: [Ayuda] Error con delete[]... algo extraño...
Publicado por: BlackZeroX en 14 Julio 2011, 01:10 am

A lo que nos referimos con tu código es al uso de __ para nombrar una variable, el uso de tabulaciones para pasar los parámetros a una función, a juntar los operadores con las variables (no lo soporto xD), etc..


Si bueno los _ como ya dije los usare para punteros de esa manera no los mesclare con el prefijo que designa al tipo, esto si no lo cmabiare, lo de las tabulaciones loq ue yaho yo es tener una linea imaginaria que me permita ordenar las asignaciones y no me genere personalmente peresa visual.

Código
  1.  
  2. asdasd = asd;
  3. asds=asd;
  4. asdsadasdsad=sd
  5. asdsd=sad;
  6. asds=a;
  7. d=s;
  8.  
  9.  

lo que hago es ordenarlo de esta manera

Código
  1.  
  2. asdasd          = asd;
  3. asds            = asd;
  4. asdsadasdsad    = sd
  5. asdsd           = sad;
  6. asds            = a;
  7. d               = s;
  8.  
  9.  

lo hago solo por la peresa viisual que me genera al ver tanto codigo juntado, lo del memcpy fue un error... ya que lo en C lo hago de esta manera.

Código
  1.  
  2. memcpy(
  3.       __new_ptr ,
  4.       __pp_back ,
  5.       _szt_now*sizeof(void*)
  6.       );
  7.  
  8.  

Pero como estoy haciendo pruebas y aun no comento nada lo dejo lineal para saber donde le faltan comentarios ( Muy breves pero explicitos ).

P.D.: Al final deje esta funcion de largo y use realloc() y malloc() para esto, dejando a new y delete para las clases.

Dulces Lunas!¡.


Título: Re: [Ayuda] Error con delete[]... algo extraño...
Publicado por: rir3760 en 14 Julio 2011, 02:51 am
Comentarios subjetivos sobre la notación húngara se pueden encontrar muchos, por ejemplo en la pagina de Charles Petzold. No solo eso, en libros considerados "argumentos de autoridad" hay lineamientos que abren la puerta a todo tipo de discusiones.

Por ejemplo en la biblia de C++ (el libro "The C++ Programing Language") BS recomienda, entre otras cosas, el uso de fuentes proporcionales (y para alinear el texto eso implica el uso de tabuladores en lugar de espacios).

Sin tratar de echarle mas leña al fuego a la discusión en el sentido de "¿cual es mejor?" un documento interesante es:

Making Wrong Code Look Wrong by Joel Spolsky (http://www.joelonsoftware.com/articles/Wrong.html).

Hay que tomarlo de forma objetiva, mente abierta y cada quien sacara sus propias conclusiones.


----


Un cuestionamiento objetivo en contra del uso de nombres como "__pp_back" es el siguiente.

1) Al utilizar nombres de encabezados terminados con ".h" como "<stdio.h>" el nombre de espacios utilizado es el global.

2) En C (y eso incluye las facilidades de su biblioteca estándar) los nombres con un guion bajo inicial están reservados.

Si bien el riesgo de un conflicto de nombres es bajo seria mejor evitarlo ya sea utilizando los nombres "políticamente correctos" como "<cstdio>" o bien evitando los nombres en la forma ya mencionada.


----


En cuanto al programa de BlackZeroX este se puede mejorar, esto por varias razones. La primera es que la variable "__pp_back" solo se utiliza para almacenar el valor de "__pp_vector" sin que ninguna de ellas sea modificada, por ello esa variable se puede eliminar.

De forma similar a free se puede utilizar delete, no es necesario verificar si se pasa un puntero nulo ya que el comportamiento esta garantizado (no pasa nada). Eso nos lleva a eliminar la ultima sentencia condicional.

A la variable "__new_ptr" se le da un valor inicial de NULL, eso nos lleva a eliminar (por superflua) la rama (y asignación) en:
Código
  1. }else
  2.   __new_ptr = NULL;

Por ultimo un detalle que debo admitir si es subjetivo: al utilizar 0 en lugar de NULL evitamos incluir <cstdio>.

Con esos cambios (mas la nomenclatura al gusto) quedaría así:
Código
  1. #include <cstring>
  2. using std::memcpy;
  3.  
  4. #include <algorithm>
  5. using std::min;
  6.  
  7. void **RedimPreserve(void **buffer, size_t size, size_t new_size)
  8. {
  9.   if (size == new_size)
  10.      return buffer;
  11.  
  12.   void **new_buffer = 0;
  13.   if (new_size > 0) {
  14.      new_buffer = new void *[new_size];
  15.  
  16.      if (size > 0 && buffer != 0)
  17.         memcpy(new_buffer, buffer, min(size, new_size) * sizeof (void*));
  18.   }
  19.  
  20.   delete[] buffer;
  21.  
  22.   return new_buffer;
  23. }
  24.  
  25. int main()
  26. {
  27.   char **msg = NULL;
  28.  
  29.   msg = (char**) RedimPreserve((void**) msg , 00 , 10);
  30.   msg = (char**) RedimPreserve((void**) msg , 10 , 11);
  31.   msg = (char**) RedimPreserve((void**) msg , 11 , 10);
  32.   msg = (char**) RedimPreserve((void**) msg , 10 , 00);
  33.   msg = (char**) RedimPreserve((void**) msg , 00 , 13);
  34.   msg = (char**) RedimPreserve((void**) msg , 13 , 20);
  35.   delete[] msg;
  36.  
  37.   return 0;
  38. }

Un saludo


Título: Re: [Ayuda] Error con delete[]... algo extraño...
Publicado por: Karman en 14 Julio 2011, 04:04 am
pero siguiendo tu lógica de programación el siguiente código:

Código
  1. void** RedimPreserve( void** __pp_vector , size_t _szt_now, size_t _szt_new )
  2. {
  3.    void            **__pp_back     = __pp_vector;
  4.    void            **__new_ptr     = NULL;
  5.  
  6.    if (_szt_now==_szt_new )
  7.        return __pp_vector;
  8.  
  9.    if ( _szt_new>0 ) {
  10.        __new_ptr       = new void*[_szt_new];
  11.        if ( _szt_now>0 && __new_ptr!=NULL && __pp_back!=NULL  )
  12.            memcpy          ( __new_ptr , __pp_back , _szt_now*sizeof(void*) );
  13.    } else
  14.        __new_ptr       = NULL;
  15.  
  16.    if ( __pp_back!=NULL )
  17.        delete[]        __pp_back;
  18.  
  19.    return __new_ptr;
  20. }

es más entendible de la forma: (size_t == unsigned integer)

Código
  1. void** RedimPreserve( void** __vVector , size_t uNow, size_t uNew ){
  2.    void            **__vBack     = __vVector;
  3.    void            **__vNewPtr     = NULL;
  4.  
  5.    if (uNow==uNew )
  6.        return __vVector;
  7.  
  8.    if ( uNew>0 ) {
  9.        __vNewPtr       = new void*[uNew];
  10.        if ( uNow>0 && __vNewPtr!=NULL && __vBack!=NULL  )
  11.            memcpy          ( __vNewPtr , __vBack , uNow*sizeof(void*) );
  12.    } else
  13.        __vNewPtr       = NULL;
  14.  
  15.    if ( __vBack!=NULL )
  16.        delete[]        __vBack;
  17.  
  18.    return __vNewPtr;
  19. }

aunque preferiría el modo:

Código
  1. void** RedimPreserve( void** ppvVector , size_t uNow, size_t uNew ){
  2.    void            **ppvBack     =ppvVector;
  3.    void            **ppvNewPtr     = NULL;
  4.  
  5.    if (uNow==uNew )
  6.        return ppvVector;
  7.  
  8.    if ( uNew>0 ) {
  9.        ppvNewPtr       = new void*[uNew];
  10.        if ( uNow>0 && ppvNewPtr!=NULL && ppvBack!=NULL  )
  11.            memcpy          ( ppvNewPtr , ppvBack , uNow*sizeof(void*) );
  12.    } else
  13.        ppvNewPtr       = NULL;
  14.  
  15.    if ( ppvBack!=NULL )
  16.        delete[]        ppvBack;
  17.  
  18.    return ppvNewPtr;
  19. }

S2

PD: Ni vi el código... solo la nomenclatura, de todas formas el código de rir3760 parece estar bien (y suele estarlo dado que le gustan este tipo de algoritmos :P)


Título: Re: [Ayuda] Error con delete[]... algo extraño...
Publicado por: BlackZeroX en 14 Julio 2011, 07:10 am

Por ejemplo en la biblia de C++ (el libro "The C++ Programing Language") BS recomienda, entre otras cosas, el uso de fuentes proporcionales (y para alinear el texto eso implica el uso de tabuladores en lugar de espacios).
Un cuestionamiento objetivo en contra del uso de nombres como "__pp_back" es el siguiente.

1) Al utilizar nombres de encabezados terminados con ".h" como "<stdio.h>" el nombre de espacios utilizado es el global.

2) En C (y eso incluye las facilidades de su biblioteca estándar) los nombres con un guion bajo inicial están reservados.

Si bien el riesgo de un conflicto de nombres es bajo seria mejor evitarlo ya sea utilizando los nombres "políticamente correctos" como "<cstdio>" o bien evitando los nombres en la forma ya mencionada.


* Uso tabulador, no espacios...
* Ok no usare "_" para declarar variables al menos que lo requiera... ( mi idea no era "__Nombre" donde "__" indicara que son punteros mas bien "_pp_TipoNombre"...  _pp_szNombres ).
* Lo de la segunda variable y lo que presedia, ya me habia dado cuanta, pero solo me interesaba ese error, que ya esta solucionado aun asi te lo agradezco.
* Me quedo con la nomeclatura de 1 sola letra para indicar los prefijos de la variable( inclusive combinaciones como las que ha hecho Karman me gusto el prefijo "v" para tipos que puedan tomar distintos tipos de variable, inclusive me soluciono un ideal que tenia respecto a las combinaciones de los mismos ).
* NULL = (void*)0...
* Con estos dos ultimos Post muy completos me han quitado la sensacion de abrir un 2do Hilo de discucion.

P.D.: El tema ya se desvirtuo mucho, aun que ya aprendi una cosa mas!¡.

Dulces Lunas!¡.