在溢出情况下内存中任何相邻分配的变量会发生什么
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.
当我在看 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.