C ++中的动态数组分配问题

时间:2010-01-31 07:17:06

标签: c++ arrays dynamic

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

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

后来我删除了[]重复项;

我只在该阵列中获得一名成员?我已经通过调试验证了stringSize - 1 = 4。我该怎么办才能得到我需要的4名成员?

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

3 个答案:

答案 0 :(得分:3)

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
}

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

答案 1 :(得分:2)

您无法使用sizeof来确定动态数组的大小。实际上,没有标准的API来确定动态数组的大小。

如果您需要访问该尺寸,请使用std::vector

答案 2 :(得分:0)

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