1.3.2 学会调试时查看内存中的内容

在调试程序时学会查看内存中的内容对于深入掌握C/C++语言编程益处巨大,下面是两行演示代码,按F9键把断点设置在printf行。

     char aaa[1000] = "safasdfa\0def";
     printf(aaa);

按F5键执行整个程序,使程序停在printf行上,我们此时就处于调试程序状态,如图1.13所示。

图1.13 处于调试程序状态

在这种状态下,按快捷键Alt+6或执行菜单命令“调试”→“窗口”→“内存”→“内存1”,在整个Visual Studio 2019界面的下方就打开了内存查看窗口,如图1.14所示。

图1.14 查看内存中的内容

只需要在“地址”编辑框中输入地址符&,后面跟要查看的变量名,然后按回车键(如这里输入&aaa并按回车键),就可以查看该变量的地址所代表的内存中的内容。当然,在如图1.13所示的第78行,双击aaa这个变量名,直接拖动至“地址”编辑框中并按回车键,也能达到查看aaa变量所代表的内存中内容的目的,如图1.15所示。

图1.15 变量aaa在内存中的内容

如图1.15所示,“地址”编辑框中显示的0x00D3F288是变量aaa所代表的内存地址。往下看,分成3部分,左侧部分显示内存地址,为变量aaa的地址以及附近的内存地址;中间部分显示的是内存地址中保存的十六进制数字内容(内存中保存的数据都是二进制数据,为了方便观察,Visual Studio 2019中把这些二进制数据以十六进制形式显示出来,4位二进制数字显示为一位十六进制数字);右侧部分显示的是内存中的十六进制数字所代表的一些字符,有些可显示字符会显示出来,对于不可显示的字符就用“.”代替。

将程序代码中的safasdfa\0def与在内存中的内容进行比较,可以看到,\0这个转义字符在内存中显示的十六进制数字为00,a这个字符在内存中显示的十六进制数字为61,十六进制的61正好是十进制的97,而十进制的97正好就是字符a的ASCII码,所以在内存中存放一个字符时,存放的其实就是该字符的ASCII码。