Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema: puntero invalido

Estas en el tema de Problema: puntero invalido en el foro de C/C++ en Foros del Web. Bueno días. Necesito ayuda para solucionar un cierto "problema". Usando código para una aplicación Win32, en cierto módulo de la misma tengo un *.exe* cuyo ...
  #1 (permalink)  
Antiguo 13/06/2012, 03:35
 
Fecha de Ingreso: junio-2008
Ubicación: Madrid
Mensajes: 73
Antigüedad: 15 años, 10 meses
Puntos: 1
Pregunta Problema: puntero invalido

Bueno días.
Necesito ayuda para solucionar un cierto "problema".

Usando código para una aplicación Win32, en cierto módulo de la misma tengo un *.exe* cuyo inicio típico se basa en la siguiente función:

Código:
int main (int argc, char *argv[])
{
...
}
Bien.
Necesito leer un número X de argumentos de entrada, que puedo controlar con argc.

Código:
for (i = 0; i < argc; i++)
{
...
}
Y en función de cada caso, cómo me van a venir cadenas de texto y números ... pues ...

Código:
switch (i)
{
...
}
Bien, el problema es que quiero controlar adecuadamente que se pueda leer el puntero, y había pensado en algo cómo

Código:
if (argv[i] != NULL)
...
Pero argv[i] puede ser nulo (0x00000000) porque por azar así puede pasar, o bien, no serlo, que es lo más habitual, (0x<basura>). El puntero, hablando desde un punto de vista práctico es nulo, pero bajo el punto de vista del compilador es "invalido". Mi pregunta es, ¿puedo usar INVALID_HANDLE_VALUE para determinar si el puntero argv[i] es válido?

Gracias.
  #2 (permalink)  
Antiguo 13/06/2012, 08:46
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Problema: puntero invalido

Nunca escuche hablar de INVALID_HANDLE_VALUE ...pero si de verdad son los argumentos del main no deberias tener que hacer esa comparacion, ya que se supone que tu sistema operativo funciona correctamente. Si no es asi, nisiquieras lo podrias estar corriendo.

Basicamente deberias olvidar esa preocupacion.,

Saludos
  #3 (permalink)  
Antiguo 14/06/2012, 00:47
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Problema: puntero invalido

int main (int argc, char argv[])

argc contiene el número de parámetros pasados en la línea de comando. argv es un array de punteros a carácter que contiene tantos elementos como indica argc. El valor de argc es, como mínimo, 1, ya que el primer parámetro es el propio programa. El resto de punteros, hasta argv[argc-1], es siempre válido. A partir de aquí, todo es basura, y debes considerarlo como no válido. Otra cuestión es si esos parámetros que has pasado son válidos o no. El puntero sí es válido, apunta a la secuencia de caracteres correspondiente al parámetro. La validez de ese parámetro debes comprobarla en tu programa.
  #4 (permalink)  
Antiguo 18/06/2012, 07:53
 
Fecha de Ingreso: junio-2008
Ubicación: Madrid
Mensajes: 73
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema: puntero invalido

SOLUCION

Al final el ejecutable tiene que ser multi-funcional, es decir, servir para varias apps distintas que le van a invocar, de ahí la necesidad de comprobar que cada argumento sea uno valido antes de operar con él.

Se puede hacer lo siguiente:

Código:
if ((argv[x] != NULL)&&(argv[x] != INVALID_HANDLE_VALUE))
{
...
}
Con NULL se comprueba que el puntero argv[x] no sea 0x00000000 y con INVALID_HANDLE_VALUE, que no sea 0xFFFFFFFF, ambas palabras reservadas del sistema (Windows).

Así pues sólo se opera con el puntero sí este no es nulo y es valido.

Etiquetas: int, invalido, puntero
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:49.