C++问题中的动态数组分配
Posted
技术标签:
【中文标题】C++问题中的动态数组分配【英文标题】:Dynamic array allocation in C++ question 【发布时间】:2010-01-31 07:17:06 【问题描述】:我有一个 Duplicate 类型的结构 我有一个名为 stringSize 的 int 类型变量,它的值为 5 我正在创建一个动态数组:
Duplicate *duplicates;
duplicates = new Duplicate[stringSize - 1];
后来我删除[]重复;
我只在该数组中获得一个成员?我已经通过调试遍历验证了 stringSize - 1 = 4。我该怎么做才能获得所需的 4 名成员?
任何帮助表示赞赏, 谢谢 // :)
【问题讨论】:
为什么你认为你只得到一个元素?你是怎么检查的? 【参考方案1】: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
调试器应该如何知道它是指向一个数组还是一个值?它不能,安全地。 (它必须以某种方式确定指针是否指向数组,以及该数组的大小。)
【讨论】:
XCode 中的调试演练仅显示 1 个成员?我受阻了?一定是我想念的东西? @Spanky:没问题。 @Cellfish::P【参考方案2】:您不能使用sizeof
来确定动态数组的大小。事实上,并没有标准的 API 来确定动态数组的大小。
如果您需要访问大小,请使用std::vector
。
【讨论】:
【参考方案3】:如果你使用调试器查看你得到的元素,问题可能是你的变量类型是Duplicate*
,它只是一个指针(在 C 中它恰好也是一个数组,但类型只是一个指向Duplicate
的一个实例的指针。
【讨论】:
以上是关于C++问题中的动态数组分配的主要内容,如果未能解决你的问题,请参考以下文章