Циклон выполняет статические или динамические проверки на указатели жира?
Я прохожу путь через Cyclone: безопасный диалект C для класса PL. Авторы статьи объясняют, что они добавили специальный "толстый" указатель, который хранит информацию о границах для предотвращения переполнения буфера. Но они не указывают, является ли проверка этого указателя статической или динамической. Пример, который они приводят, по-видимому, подразумевает, что программист должен помнить, чтобы проверить размер массива, чтобы убедиться, что они не превышают буфер. Похоже, это открывает возможность ошибок программирования, как в C. Я думал, что идея Cyclone заключалась в том, чтобы сделать такие ошибки невозможными. У языка есть проверка? Разве это усложняет ошибки в программировании?
int strlen(const char ?s) {
int i, n;
if (!s) return 0;
n = s.size; //what if the programmer forgets to do this.. or accidentally adds an n++;
for (i = 0; i < n; i++,s++)
if (!*s) return i;
return n;
}
1 ответ
"Толстые" указатели поддерживают арифметику указателей с проверкой границ во время выполнения.
Получено из Википедии путем поиска в поисках "жирных указателей".