在溢出情况下内存中任何相邻分配的变量会发生什么

What happens to any adjacently allocated variables in memory in a overflow case

当我在看 CS50 测试 Spring 2017 时,我遇到了这个问题:

http://cdn.cs50.net/2017/spring/test/bleep.html

link(嘟嘟)第一个问题的指定答案如下:

Because only 4 bytes are allocated for word, 5-letter words like puppy and 6-letter words like kitten will overflow that buffer, with their fifth letters' (non-zero) ASCII codes ending up in the memory allocated for bleep. The value of bleep will thus be non-zero (i.e., not false), and so bleep will effectively be true, in which case those words are bleep.

我不明白为什么溢出会导致非零哔声值。我知道内存泄漏的概念。但我想,不知道那个缓冲区溢出会阻碍什么。

如果有人对此主题进行详细解释或分享一些来源,将不胜感激。

如问题中的图片所示,内存布局如下所示:

xxxx0
    ^- bleep

xxxx是为word保留的内存,0是为bleep保留的内存。

如果你在 word 中输入一个 3 个字母的单词,记忆将如下所示:

dog00
    ^- bleep

倒数第二个零是字符串的终止符。没有溢出,没有问题。

如果您有一个 five-letter 单词,当 word 溢出时,为 bleep 保留的 space 将被覆盖。

puppy0
    ^- bleep

单词 "puppy" 的 space 不足,因此它溢出并覆盖了 bleep 的值。现在 bleep 的值是 'y' (121) 的 ASCII 值,即 non-zero 并且 bleep 已从 false 变为 true.