[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