2013-02-09 123 views
0

一些简单的代码似乎不工作,我不知道为什么。C++设置动态创建的数组的值失败

enter image description here

我动态创建整数数组。这个数组的大小显示为15,但这是因为我试图调试程序。实际大小在运行时是可变的。

我浏览了几个网站,了解如何在C++中动态创建整数数组。像this one这样的网站出现了。他们的代码看起来像我的代码:创建一个数组,并且一个for循环设置数组中每个元素的值。

但是我的for循环运行后,我得到一个大小为0的数组。可能是什么问题?

这是一个非常基本的使用Visual Studio编译Windows的C++程序。

+2

你如何确定数组的大小?你确定这不仅仅是调试器不理解'int * array = new int [15];' - 我还没有遇到一个调试器,它知道如何知道指针的大小...... [或者理解指针指向的大小,至少是] – 2013-02-09 00:41:32

+0

[Works for me](http://stacked-crooked.com/view?id=2a5fda30a5902bec4e60395b2da6e30f)。 – Rapptz 2013-02-09 00:42:34

+0

所以这是调试器的问题,特别是自Rapptz得到它的工作? – Jason 2013-02-09 00:43:39

回答

2

调试器不知道这是一个指向数组的开始,它认为你有一个普通的指针,int(因为这是array类型:int*)。因此它显示了int(数组中的第一个元素)的值,这里是0

你的代码很好;您确实已正确分配(并初始化)了一组15 int

+0

@Jason:是的,阵列就在那里。调试器只是不知道它。没有什么可以做的 - 你需要自己记住数组的大小,以便它无论如何都是有用的。如果'new []'没有抛出或返回一个nullptr,那么你可以放心,它给了你所要求的一切。 – Cameron 2013-02-09 00:47:55

+0

非常感谢。 – Jason 2013-02-09 00:48:22

+0

@Cameron:“你可以做的事情不多” - 当然,有。您可以告诉调试器将指针解释为数组,并指定数组中有多少个元素(如果调试器支持的话)。然后它会显示所有元素,而不仅仅是第一个元素。尽管如此,但实际上这是调试器专用的。在Borland/Embarcadero中,您可以右键单击指针并选择“范围”菜单项。在VC++中,我不确定它是否可以直接在调试器中完成,但我确实知道如果需要,VC++确实支持创建自定义调试可视化器。 – 2013-02-09 01:04:51

3

指针与数组不同,调试器只会显示第一个元素的内容及其地址。您的动态数组已正确创建,您可以将array[0],... array[14]添加到watch window,您可以在内存中查看每个变量。 enter image description here

或过去的数组的内存地址调试 - > Windows的>内存 - >存储器1,你可以看到在内存中的每个元素被正确初始化

enter image description here

如果声明静态数组,调试器应向您展示所有元素:

int array2[15]; 

这些都是基本的调试技巧,它在调试应用程序时变得非常方便。