[eside-ghost] Control de errores de acceso a memoria en C?

STenyaK (Bruno Gonzalez) stenyak en gmail.com
Mie Mar 5 18:05:54 CET 2008


Suelo intentar huir de código C, asi que no te puedo decir mucho...

Googleando rapidamente, dicen q no hay ninguna solución "portable".

Yo personalmente intentaría usar algun sizeof (en conjuncion con un
strncmp, en vez de strcmp, ya q estamos).

Si eso no es suficiente (probablemente no), siempre puedes usar
try-catch para cazar el segfault si ocurre. Si va a rular en windows,
mira la documentacion a ver qué tipo de excepcion usa, q en win a
veces pasan de std::exception, y tal vez tengas q cazar directamente
"...".

Y luego ya, quedaria eliminar la causa en vez de arreglar la consecuencia:
- Siempre poner los punteros a NULL con los delete o antes de los new.
- Activar todos los warnings posibles para cazar casts implicitos no
deseados, como es tu ejemplo de pasar un (int)(42) a un (const
char*)(42).
- Usar punteros inteligentes :-P

No se me ocurre mucho mas. Igual valgrind te puede echar una mano de
alguna forma, no recuerdo si hacía analisis estático o solo en
ejecución.

On 3/5/08, Jon Valdés <juanval en gmail.com> wrote:
> Bueeenas,
>
>  Ando haciendo un trabajillo en el que me quiero asegurar de que una
>  función no puede segfaultear.
>  Básicamente, la función es:
>
>  int parse_thing(const char * thing)
>  {
>    if(thing == NULL)
>       return THING_ERROR;
>    else if(strcmp(thing,"OK")==0)
>       return THING_OK;
>    else
>       return THING_ERROR;
>  }
>
>  donde THING_ERROR y THING_OK están definidos en un enum.
>
>  El caso es que pretendo que la función sea capaz de aguantar una
>  llamada liante en plan  "parse_thing((char*)42);", y que devuelva
>  THING_ERROR, en lugar de segfaultear.
>
>  ¿Alguna idea?
>
>  Enga, muchas graciaaas
>
>  Taluegooo
>
> _______________________________________________
>  eside-ghost mailing list
>  eside-ghost en deusto.es
>  https://listas.deusto.es/mailman/listinfo/eside-ghost
>


-- 
Saludos,
     Bruno González

_______________________________________________
Msn/Jabber: stenyak AT gmail.com
ICQ: 153709484
http://www.stenyak.com


Más información sobre la lista de distribución eside-ghost