1

我的问题是,当我要求调试器表示数组中的元素时,数字代表什么?我知道它不能是 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}
4

4 回答 4

4

它正在显示内容。请记住,当您在第 5 行中断时,第 5 行尚未执行,因此尚未发生初始化。它向您显示当前在这些内存位置的任何随机值。

于 2013-10-19T03:36:28.713 回答
2

我不确定你的意思是什么int 5。是从哪里来5的?

我猜你看到的只是数组的当前内容num

执行在 的定义处停止num,其中的内存num已经存在,但尚未执行初始化。所以,你看到的是num.

如果您跳到下一行并num再次显示,您将看到{5,15,25,45}

这可能适用于i,尽管从您发布的内容中无法看到i定义的位置。

于 2013-10-19T03:36:09.220 回答
1

这些不是内存位置。它们被称为垃圾值。直到一个数组元素没有被明确分配它包含一个垃圾值。

于 2013-10-19T03:36:58.467 回答
1
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
于 2013-10-19T03:51:45.150 回答