struct item
{
unsigned int a, b, c;
};
item* items[10];
delete items[5];
items[5] = NULL;
上面的代碼工作刪除在C++
但下面的方法是行不通的
int * arr1[30];
delete (arr1+5);
我是初學者,請告訴我爲什麼我能夠刪除結構指針的情況下,但不是int 指針
struct item
{
unsigned int a, b, c;
};
item* items[10];
delete items[5];
items[5] = NULL;
上面的代碼工作刪除在C++
但下面的方法是行不通的
int * arr1[30];
delete (arr1+5);
我是初學者,請告訴我爲什麼我能夠刪除結構指針的情況下,但不是int 指針
你是否在任何地方分配堆內存?你在上面的代碼中沒有這樣做。你很幸運,第一次刪除不會崩潰。
你似乎誤解了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;
}
當使用(arr1+5)
方法,你傳遞數組槽本身的內存地址在索引5處,而不是插槽包含的int*
。爲了delete
是在指數5包含在插槽int*
,你必須取消引用指針的值,例如:
delete *(arr1+5);
你打我吧:)) – johnathon
我想這就是所謂的「西方最快的手指」 ;) –
大聲笑,以及亞從我反正+1,好工作 – johnathon