腐败的变量?检查周围的记忆作为字符



我在读Andrew Hunt和David Thomas合著的《The Pragmatic Programmer》。在第95页,在名为"调试"的部分,作者写道:

"有时你会检查一个变量,希望看到一个小整数值,而得到类似0x6e69614d的值。在你起床之前对于您的袖子进行一些严肃的调试,请快速查看一下这个损坏变量周围的内存。通常它会给你一个提示。在本例中,以字符形式检查周围的内存显示:

20333231 6e69614d 2c745320 746f4e0a
  1 2 3   M a i n    St,    n No t
2c6e776f 2058580a 31323433 00000a33
 o w n ,  n X X   3 4 2 1  2n

看起来有人在我们的柜台上喷了一个街道地址。现在我们知道去哪里找。"

我不能完全理解这个例子。

1)作者在这种情况下使用"counter"是什么意思?

2)为什么如果有人在那里喷了一个街道地址,在我们的变量中我们应该看到内存地址而不是值"Main"?

3)在成瘾方面,我还想问一下,哪些工具可以让你作为角色查看"记忆邻居"?

注:请注意,保存值:"Main"的内存地址(6e69614d)与我们在变量0x6e69614d
中找到的地址相同。

Counter是他们在场景开始时使用的小整数值。

那不是一个内存地址,它是一个十六进制的数字。它可以是内存地址,它可以是一个大数字,它可以是地址的几个字符,如144和Main…

至于工具,取决于你在什么环境下工作。

您应该注意到,这类问题困扰着非托管环境中的开发人员,特别是在故意使用像C

这样的松散语言时。

你所需要的只是一个函数,它接受一个指向字符串的指针,这个字符串在某个地方被定义为16个字符。

给它写18个字符,你只是践踏了字符串后面的前两个字节。

像Pascal这样更严格的语言,或者更现代的管理语言,会开始对你大喊大叫。请注意,无意中做到这一点要困难得多,也意味着有意做到这一点要困难得多,所以更现代并不会自动转化为更好。

最新更新