我的问题是,当我要求调试器表示数组中的元素时,数字代表什么?我知道它不能是 ASCII 或 5 的二进制表示,它是特定 int 5 的内存位置吗?
Breakpoint 1, main () at ArrnLoops.c:5
5 int num[] = {5,15,25,45};
(gdb) display i
1: i = 2981876
(gdb) display num
2: num = {1466917, 1176192, 0, 134513753}
它正在显示内容。请记住,当您在第 5 行中断时,第 5 行尚未执行,因此尚未发生初始化。它向您显示当前在这些内存位置的任何随机值。
我不确定你的意思是什么int 5
。是从哪里来5
的?
我猜你看到的只是数组的当前内容num
。
执行在 的定义处停止num
,其中的内存num
已经存在,但尚未执行初始化。所以,你看到的是num
.
如果您跳到下一行并num
再次显示,您将看到{5,15,25,45}
。
这可能适用于i
,尽管从您发布的内容中无法看到i
定义的位置。
这些不是内存位置。它们被称为垃圾值。直到一个数组元素没有被明确分配它包含一个垃圾值。
Breakpoint 1, main () at ArrnLoops.c:5
5 int num[] = {5,15,25,45};
行首5
的 是行号。如果您使用step 或 go next,您将看到该命令的行号。
在display
命令中,这n:
只是一个结果跟踪号。我无法弄清楚如何在其他表达式中直接使用它,但如果你使用print
( p
) 代替,你会看到如下内容:
(gdb) p i
$1 = 2981876
然后您可以在其他表达式中使用结果:
(gdb) p $1 / 100
$2 = 29818