Вот почему:
char x;
char *y=malloc(1);
char *z=alloca(&x-y);
*z = 1;
Не то, чтобы кто-нибудь написал этот код, но аргумент размера, который вы переходите на alloca
, почти наверняка исходит из какого-то ввода, который мог бы злонамеренно получите свою программу в alloca
что-то огромное. В конце концов, если размер не основан на вводе или не имеет возможности быть большим, почему бы вам просто не объявить небольшой локальный буфер фиксированного размера?
Практически весь код, используя alloca
и / или C99 vlas имеют серьезные ошибки, которые приведут к сбоям (если вам повезет) или к компрометации привилегий (если вам не повезло).
Трудно загрузить все данные впереди, когда они большие. Можете ли вы выполнить внутренний запрос, когда поле поиска теряет фокус?