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