【问题标题】:Dynamic array allocation in C++ questionC++问题中的动态数组分配
【发布时间】:2010-01-31 07:17:06
【问题描述】:

我有一个 Duplicate 类型的结构 我有一个名为 stringSize 的 int 类型变量,它的值为 5 我正在创建一个动态数组:

Duplicate *duplicates;
duplicates = new Duplicate[stringSize - 1];

后来我删除[]重复;

我只在该数组中获得一个成员?我已经通过调试遍历验证了 stringSize - 1 = 4。我该怎么做才能获得所需的 4 名成员?

任何帮助表示赞赏, 谢谢 // :)

【问题讨论】:

  • 为什么你认为你只得到一个元素?你是怎么检查的?

标签: c++ arrays dynamic


【解决方案1】:
Duplicate *duplicates;
duplicates = new Duplicate[stringSize - 1];

确实给你duplicates[0-3](假设stringSize - 1 是4,就像你说的那样)。你如何确定你得到的更少?

我怀疑您可能正在做类似的事情:sizeof(duplicates) / sizeof(duplicates[0]),并且在换钱时得到一个。上面的代码仅适用于静态分配的数组,其中sizeof(duplicates) 将匹配数组的大小,以字节为单位。在您的情况下,它只会返回系统上指针的大小。 (duplicatesDuplicate*

并且强制:如果这是“真实”代码,请使用std::vector


您的调试器正在尽其所能。就它而言,您只是获得了指向某些数据的指针。考虑:

Duplicate foo;
Duplicate *duplicates_A;
duplicates_A = &foo; // points to one Duplicate

Duplicate *duplicates_B;
duplicates_B = new Duplicate[4]; // points to memory containing 4 Duplicate's

bar(duplicates_A);
bar(duplicates_B);

void bar(Duplicate* p)
{
    // is p a pointer to one value, or is it an array?
    // we can't tell, and this is the same boat your debugger is in
}

调试器应该如何知道它是指向一个数组还是一个值?它不能,安全地。 (它必须以某种方式确定指针是否指向数组,以及该数组的大小。)

【讨论】:

  • XCode 中的调试演练仅显示 1 个成员?我受阻了?一定是我想念的东西?
  • @Spanky:没问题。 @Cellfish::P
【解决方案2】:

您不能使用sizeof 来确定动态数组的大小。事实上,并没有标准的 API 来确定动态数组的大小。

如果您需要访问大小,请使用std::vector

【讨论】:

    【解决方案3】:

    如果你使用调试器查看你得到的元素,问题可能是你的变量类型是Duplicate*,它只是一个指针(在 C 中它恰好也是一个数组,但类型只是一个指向Duplicate 的一个实例的指针。

    【讨论】:

      猜你喜欢
      • 2017-05-07
      • 2022-01-17
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 2021-01-02
      • 1970-01-01
      • 2012-05-02
      相关资源
      最近更新 更多