我有一个Duplicate类型的结构 我有一个名为stringSize的int类型的变量,它的值为5 我正在创建一个动态数组:
Duplicate *duplicates;
duplicates = new Duplicate[stringSize - 1];
后来我删除了[]重复项;
我只在该阵列中获得一名成员?我已经通过调试验证了stringSize - 1 = 4。我该怎么办才能得到我需要的4名成员?
任何帮助表示赞赏, 谢谢// :))
答案 0 :(得分:3)
Duplicate *duplicates;
duplicates = new Duplicate[stringSize - 1];
确实给了你duplicates[0-3]
(假设stringSize - 1
是4,就像你说的那样)。你是如何确定自己的收入减少了?
我怀疑你可能正在做类似的事情:sizeof(duplicates) / sizeof(duplicates[0])
,并且正在做一个不可更改的事情。上面的代码仅适用于静态分配的数组,其中sizeof(duplicates)
将匹配数组的大小(以字节为单位)。在您的情况下,它只会返回系统上指针的大小。 (duplicates
是Duplicate*
)
并且必须:如果这是“真实”代码,请使用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
的一个实例的指针。