Я отлаживал сбой в программе, которая прерывается с ошибкой 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 0
вне блока #ifdef #endif
, программа не прервется (из-за разрушения стека).Прерывание также не отображается, если я определяю функцию как static void
вместо static ssize_t
Может ли отсутствие оператора возврата вызвать стековый протектор для запуска прерывания?