Me han mordido el trasero varias veces cuando escribiría en una matriz fuera del alcance. He estado trabajando en un firmware en particular durante más de 2 años y sospecho un desbordamiento que ahora es casi imposible de encontrar, por ejemplo:
uint8_t example[50]; uint8_t example2[100]; for(uint8_t i = 0; i < sizeof(example2); i++) example[i] = i;Entiendo que el ejemplo de código anterior es primitivo. Es sólo un ejemplo de lo que estoy tratando de describir.
¿Hay algún paquete o función disponible que pueda detectar estas "fugas"?
Las versiones recientes de GCC con la bandera -Wall detectarán errores simples como el problema en su ejemplo e imprimirán una advertencia.
La herramienta Valgrind es más avanzada, pero también más laboriosa de configurar y utilizar correctamente.
No existe una herramienta en el universo que pueda detectar todos los errores posibles, así que comience con la más fácil de usar.
El análisis estático no puede hacer mucho, pero estas son algunas de las herramientas que uso a diario:
Además, como señaló Tom V, active tantas advertencias como sea posible ( -Wall es un mínimo, aquí hay un buen conjunto inicial de banderas de advertencia).