Я не понимаю, как библиотека могла бы сделать это для вас; с массивом переменной длины вы не вызываете никаких функций для индексации, поэтому нет места для "зацепления" библиотеки. При malloc()
распределение является явным в функции, и вы можете отслеживать его.
Конечно, вы можете пройти по коду и использовать хитрость препроцессора, чтобы добавить некоторый макрос к каждой точке индексации, а макрос развернуть до кода, который проверяет границы. Но это очень навязчиво.
Я думаю что-то вроде изменения:
void work(int n)
{
int data[n]; /* Our variable-length array. */
data[0] = 0;
}
в нечто вроде:
#include "vla-tracking.h"
void work(int n)
{
VLA_NEW(int, data, n); /* Our variable-length array. */
VLA_SET(data, 0, 0);
}
Затем придумайте подходящие определения макросов (и вспомогательный код) для отслеживания доступа. Как я уже сказал, это не будет красиво. Конечно, идея заключается в том, что макросы смогут «компилироваться» только в простые определения, управляемые некоторыми настройками времени сборки (режим отладки / выпуска или что-то еще).