Aquí está mi fragmento de código:
#include <stdlib.h> #include <stdio.h> typedef struct node { char key; // value struct node *next; // pointer to the next element } Node; int main(void) { Node *n = malloc(sizeof(Node)); n->key = 'K'; n->next = NULL; free(n); printf("%c\n", n->key); }Cuando se compila y ejecuta el fragmento anterior...
ganningxu@Gannings-Computer:~/test$ gcc test_faults.c -o test_faults; ./test_faults K ganningxu@Gannings-Computer:~/test$ clang test_faults.c -o test_faults; ./test_faults KNo hay advertencias ni errores del compilador cuando se accede a la memoria liberada. ¿Hay alguna forma de obligar al compilador a mostrar tales errores?
Al compilar con GCC, puede usar -fsanitize=address para que "las instrucciones de acceso a la memoria estén instrumentadas para detectar errores fuera de los límites y uso después de la liberación". Por supuesto, esto afectará el rendimiento del programa y también puede cambiar el comportamiento del programa si hay errores.