【问题标题】:C++ Setting the values of a dynamically created array failsC++ 设置动态创建数组的值失败
【发布时间】:2013-01-24 20:55:00
【问题描述】:

一些简单的代码似乎不起作用,我不知道为什么。

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

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

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

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

【问题讨论】:

  • 你如何确定数组的大小?你确定这不仅仅是调试器不理解int *array = new int[15]; - 我还没有遇到一个调试器知道如何知道指针的大小...... [或者理解指针指向的大小指针,至少]
  • 所以这是调试器的问题,尤其是在 Rapptz 让它工作之后?
  • @MatsPetersson,通常数组的大小由另一个整数变量(通常为 12,但可以更改)确定。这里是一个常数 15。
  • 喜欢this?

标签: c++ windows arrays


【解决方案1】:

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

或者过去数组内存地址到DEBUG->Windows->Memory->Memory1,可以看到内存中的每个元素都被正确初始化了

如果你声明静态数组,调试器应该显示所有元素:

 int array2[15];

这些是基本的调试技巧,在调试应用程序时会派上用场。

【讨论】:

    【解决方案2】:

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

    您的代码很好;您确实已正确分配(并初始化)了一个包含 15 个 ints 的数组。

    【讨论】:

    • @Jason:是的,数组就在那里。调试器只是不知道它。你无能为力——你需要自己记住数组的大小才能让它有用。如果new[] 工作时没有抛出或返回 nullptr,那么您可以放心,它会为您提供所需的一切。
    • @Cameron:“你无能为力”——当然,有。您可以告诉调试器将指针解释为数组并指定数组中有多少元素(如果调试器支持)。然后它将显示所有元素,而不仅仅是第一个元素。但是,您实际上如何做到这一点是特定于调试器的。在 Borland/Embarcadero 中,您只需右键单击指针并选择“范围”菜单项。在 VC++ 中,我不确定是否可以直接在调试器中完成,但我知道 VC++ 确实支持创建自定义调试可视化工具(如果需要)。
    • @Remy: 没错(this shows how for VS,Jason 在 cmets 中发表),但您无法从中判断元素是否实际上是数组的一部分或属于某个人其他变量的内存。
    猜你喜欢
    • 2013-05-20
    • 1970-01-01
    • 2021-10-04
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 2018-01-21
    相关资源
    最近更新 更多