Обнаружено разрушение стека, когда в функции, возвращающей 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) объявлено, что оно возвращает не пустое значение, существует без возврата или броска, тогда поведение программы не определено.

Может ли отсутствие оператора возврата привести к тому, что стек-протектор вызовет прерывание?

Да. Поведение не определено. Все может случиться.

Другие вопросы по тегам