Обнаружено разрушение стека, когда в функции, возвращающей non-void, нет оператора return
Я отлаживал сбой в программе, которая прерывается с ошибкой stack smashing detected
, Я сузил аварию до одной функции:
static ssize_t a (const char *x, const char *y, size_t z) {
#ifdef SOME_FLAG
return b(x, y, z);
#endif
}
Поскольку я нигде не определяю SOME_FLAG, функция практически ничего не делает и завершается без оператора return.
Я заметил, что если я просто добавлю return 0
вне #ifdef #endif
блок, программа не прерывается (из-за разрушения стека). Прерывание также не видно, если я определяю функцию как static void
вместо static ssize_t
Может ли отсутствие оператора возврата привести к тому, что стек-протектор вызовет прерывание?
1 ответ
Что касается C++:
Если функция (кроме main
) объявлено, что оно возвращает не пустое значение, существует без возврата или броска, тогда поведение программы не определено.
Может ли отсутствие оператора возврата привести к тому, что стек-протектор вызовет прерывание?
Да. Поведение не определено. Все может случиться.