我正在使用eclipse和netbeans for c,我想检查在我调试时在内存中动态分配的变量的值(在 eclipse 和< EM> netbeans的)。
由于某种原因,我只能看到指针本身的值,它是第一个项目。
用以下代码说明:
int foo[10];
我可以稍后检查整个数组的值(调试时)。 例如,我可以在观察窗口中查看foo [7]的值。
但使用此代码:
int *bar = malloc(10*sizeof(int));
我只能查看bar
所指向的位置以及bar[0]
的值(而不是其他值)。
我怎样才能观察阵列的所有值?
:右键单击 Variables 窗口中的所需变量 - &gt;选择显示为数组 - &gt;填写起始索引和数组长度。
netbeans中的:在 Watches 窗口中添加一个具有以下格式的新手表:
*((bar)+0)@10
其中bar
应该是指针名称,
0
应该是您的起始索引
10
应该是它的长度
如果我可以添加个人内容:这是我在 stackoverflow 上的第一条消息。我希望你发现它很有用。
答案 0 :(得分:3)
当你使用指针变量时,调试工具可以自动推断的唯一知识就是你有一个整数值的地址。在这个事实之后,理论上你可以在整数值后面有任何东西,工具不可能猜测指针实际上是整数数组的第一个元素。
也就是说,你可以尝试添加一个自定义监视表达式(至少在Eclipse上,我不知道netbeans),它将你的指针转换为整数数组。我不知道你是否可以使用精确的数组长度进行投射。
类似(int[])bar
之类的东西肯定会有用,但也许这种形式可能有效(int[10])bar
。
另一种解决方案是直接查看指针地址处的内存视图,但将原始字节序十六进制输出转换为整数值更为精神上的运动......
现在,如果指针始终分配给10个整数的内存块,则最好考虑使用数组形式int bar[10];
静态分配它
答案 1 :(得分:2)
我不知道它是否适用于Eclipse或Netbeans,但您可以尝试在*(bar + 1)
上为第二个“条目”添加一个监视。但是,您可能无法将bar
用作数组,除非调试器允许您将其类型转换为数组(如(int[])bar
,我不知道它是否甚至可以在实际C中工作)。 / p>