-fcatch-undefined-behavior
no maneja las referencias al puntero al azar. Para manejar este caso, el compilador tendría que almacenar el tamaño de los datos apuntados junto con el puntero y pasar ese tamaño en cada llamada a función. Eso sería incompatible con el ABI existente y requeriría recompilar todas las bibliotecas a las que pertenece su programa.
Puede argumentar que malloc
es una función conocida y el compilador podría suponer que el puntero devuelto apunta a una matriz del tamaño solicitado.
Pero se estaría olvidando que malloc
puede devolver NULL
. Si el compilador asumió que el puntero no es NULL
, optimizaría cualquier comprobación NULL
(bastante peligrosa).Si el compilador asume el puntero es NULL
o un puntero a un array de tamaño solicitado, que se convertiría en un poco complicado de manejar (y no hemos de hablar free
y realloc
aún). Además, cualquier código que elimina referencia a un puntero -ated malloc
sin NULL
comprobación sería considerado como un comportamiento indefinido.
Sin mencionar que su programa no puede vincular a la biblioteca estándar sino a una biblioteca que proporciona una implementación personalizada de malloc
con una semántica diferente.
Sí, se echa en falta que la captura/all/comportamiento indefinido es un problema muy difícil, demasiado difícil para un compilador para poner en práctica. – PlasmaHH
-faddress-sanitizer debería atrapar esto, como debería valgrind. –
Gracias, Ambroz. Esto fue de lo más útil. – Oleg2718281828