2010-01-31 100 views
2

我有类型的结构重复 我有称为stringsize的int类型的变量,其具有5 我创建一个动态数组的值:动态数组分配在C++问题

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

后来我删除[]重复;

我只在该数组中获得一个成员?我已经通过调试验证了stringSize - 1 = 4。我能做些什么来获得我需要的4名成员?

赞赏任何帮助, 感谢// :)

+4

为什么你认为你只能得到一个元素?你如何检查它? – sth 2010-01-31 07:21:12

回答

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 
} 

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

+0

XCode中的调试演练只显示1个成员?我受阻了吗?必须是我缺少的东西? – Spanky 2010-01-31 07:26:21

+0

完全正确!谢谢// :) – Spanky 2010-01-31 07:33:13

+0

我太迟了我的回应... – Cellfish 2010-01-31 07:34:48

2

您不能使用sizeof来确定动态数组的大小。事实上,没有一个标准的API来确定动态数组的大小。如果您需要访问大小,请使用std::vector

0

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