Это вопрос спецификации C.
Мы все знаем, что это законный C и должен работать нормально на любой платформе:
/* Stupid way to count the length of a number */
int count_len(int val) {
char buf[256];
return sprintf(buf, "%d", val);
}
Но это почти гарантированно сбой:
/* Stupid way to count the length of a number */
int count_len(int val) {
char buf[256000000];
return sprintf(buf, "%d", val);
}
Разница в том, что последняя программа ударяет стек и, вероятно, сбой. Но, чисто семантически, это действительно не отличается от предыдущей программы.
В соответствии с спецификацией C, является ли последняя программа фактически undefined поведением? Если да, то что отличает его от первого? Если нет, то что в спецификации C говорит, что это нормально для аварийной реализации?
(Если это отличается от C89/C99/C11/С++ *, это тоже было бы интересно).