2014-10-13 28 views
0

如您所知,如果要刪除任何類型的動態分配數組(您使用的運算符爲new[]),則應使用delete[]來除去它。現在檢查未完全填充的數組中的字符是否爲空

,我想知道是否有什麼辦法我可以刪除一個動態分配的數組的一個對象。

char* someNewArray = new char[someInt]; 

//Add values to the array 

delete &someNewArray[2] //or maybe delete[] instead of just delete 
+0

什麼你的 「空」 的含義是什麼?您希望用戶如何在元素之間的'usr_answer'中輸入「空」字符? – P0W

+0

未初始化的數組可能包含任何內容。如果你想要它有一些值,你可以檢查然後設置每個元素的值。你最好使用'std :: string'。 –

+0

@ P0W基本上我的這個計劃是讓他的答案,得到給定答案字符(不指向任何內容),然後創建一個新調整字符數組的量。他不必輸入空白元素。只需輸入一個char數量少於字符數組的字符集合即可。 – Code0

回答

1

不,你不能。

運算符new以其數組形式分配單個內存元素能夠包含您詢問的元素數量。你可以用delete[]來釋放整個塊。

如果你想一個一個解除分配塊,你將不得不使用相同的粒度分配他們,那是一個接一個。

編輯:

這不會有什麼意義的尺寸1的對象,因爲分配的塊的過載會很大面對sizeof(char)。在這種情況下,它是更有效地與delete[]

char * tmp = new char[someInt -1]; 
memcpy(tmp, someNewArray, 2); 
memcpy(tmp+2, someNewArray + 3, someInt - 3); 
delete[] someNewArray; 
someNewArray = tmp; 

分配大小someInt -1的一個新的塊,用memcpy然後免費初始塊,但它添加較大的對象數組說LObj,而不是

LObj * newArray = new LObj[someInt]; 

你可以使用:

LObj ** newArray = new (LObj *)[someInt]; 
for (i=0; i<someInt; i++) { 
    newArray[i] = new LObj; 
} 

然後纔是有意義的使用:

delete newArray[2]; 
newArray[2] = NULL; 
+0

如果你能提供一個例子,它會非常好。 – Code0

+0

:)預先感謝您 – Code0