Почему я получаю переполнение буфера стека, когда не возвращаю значение из функции? [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему я получаю переполнение буфера стека, когда не возвращаю значение из функции? [закрыто]

Сообщение Anonymous »

Я забыл вернуть значение из функции и сразу же после вызова этой функции, когда я позвонил другой функции, я получил ошибку от дезинфицирующего средства адреса. Я знаю, что это ошибка не возвращать значение из функции, когда функция имеет возвратный тип, но я хотел бы понять, почему это переполнение буфера стека: < /p>
bool func()
{
if (0)
return false;

}

int main(int argc, char* argv[])
{

func();

// CALLED A LOGGING FUNCTION HERE
//Address Sanitizer Error : Stack buffer overflow

}
< /code>
На этой памяти зарезервировано сегмент памяти, зарезервированный, чтобы записано на возвратное значение, и в этом случае ничто не записано. Он возвращается, а затем вызывается другая функция. Адрес дезинфицирующее средство подобрало ошибку и говорит: < /p>
//Address Sanitizer Error : Stack buffer overflow
< /code>
Я думал, что переполнение буфера стека было примерно так: < /p>
void func()
{
char buff[8];
memset(buff, 0, 10);
}
< /code>
Но в первом примере я дал, я не вижу переполнения. Или это просто ошибка, подобранная дезинфицирующей средством адреса с общим сообщением об ошибке? Как Адрес, дезинфицирующее средство подняло это. Написывает ли он обратные адреса с магическим (ненициализированным) номером, а затем проверяют, по мере продвижения программы, независимо от того, присутствует ли это единолизированное значение в памяти, когда не должно?

Подробнее здесь: https://stackoverflow.com/questions/794 ... om-a-funct
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»