2011-12-06 33 views
2
struct item 
{ 
    unsigned int a, b, c; 
}; 

item* items[10];  
delete items[5];  
items[5] = NULL; 

上面的代碼工作刪除在C++

但下面的方法是行不通的

int * arr1[30]; 

delete (arr1+5); 

我是初學者,請告訴我爲什麼我能夠刪除結構指針的情況下,但不是int 指針

回答

3

你是否在任何地方分配堆內存?你在上面的代碼中沒有這樣做。你很幸運,第一次刪除不會崩潰。

13

你似乎誤解了delete的用途:它完全簡單地釋放由new分配的內存,而不是「刪除」數組的元素。

所以,你可能會使用這樣的:

int *p = new int; 
//... 
delete p; 

當您分配數組,你必須改用delete[],像這樣:

int *q = new int[23]; 
//... 
delete [] q; 

但在任何時候,你應該嘗試delete東西那不是new'ed,或者使用delete的不匹配版本,例如上面的delete [] p;delete q;

如果你真正想要的是某種形式的「數組」,從中可以刪除元素,試試這個:

#include <vector> 

struct item 
{ 
    unsigned int a, b, c; 
}; 

int main() 
{ 
    std::vector<item> items(10); 
    items[5].a = 23; 
    items.erase(items.begin() + 5); 
    return 0; 
} 
+0

你打我吧:)) – johnathon

+0

我想這就是所謂的「西方最快的手指」 ;) –

+1

大聲笑,以及亞從我反正+1,好工作 – johnathon

0

當使用(arr1+5)方法,你傳遞數組槽本身的內存地址在索引5處,而不是插槽包含的int*。爲了delete是在指數5包含在插槽int*,你必須取消引用指針的值,例如:

delete *(arr1+5);