2010-01-31 126 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的一個實例