No veo cómo una biblioteca podría hacer esto por usted; con una matriz de longitud variable, no está llamando a ninguna función para hacer la indexación, por lo que no hay lugar para "enganchar" una biblioteca. Con malloc()
, la asignación es explícita en una función y puede rastrearla.
Por supuesto, puede revisar el código y usar el truco del preprocesador para agregar algo de macro a cada punto de indexación y hacer que la macro se expanda al código que verifica los límites. Pero eso es muy intrusivo.
estoy pensando algo así como el cambio:
void work(int n)
{
int data[n]; /* Our variable-length array. */
data[0] = 0;
}
en algo así como:
#include "vla-tracking.h"
void work(int n)
{
VLA_NEW(int, data, n); /* Our variable-length array. */
VLA_SET(data, 0, 0);
}
luego llegar a las definiciones de macros adecuadas (y el código auxiliar) para realizar un seguimiento de los accesos. Como dije, no será bonito. Por supuesto, la idea es que las macros sean capaces de "compilar" solo las definiciones simples, controladas por alguna configuración de tiempo de compilación (modo de depuración/liberación, o lo que sea).