Обнаружено разрушение стека, когда в функции, возвращающей non-void, нет оператора return - PullRequest
0 голосов
/ 26 февраля 2019

Я отлаживал сбой в программе, которая прерывается с ошибкой 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

Может ли отсутствие оператора возврата вызвать стековый протектор для запуска прерывания?

1 Ответ

0 голосов
/ 26 февраля 2019

Относительно C ++:

Если функция (отличная от main), объявленная для возврата не пустого значения, существует без return или throw, то поведение программы не определено.

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

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

...