一道面試題是關(guān)于內(nèi)存空間的申請
char *p=NULL;
p=new char[10];
delete p;
這是道改錯題,在網(wǎng)上看到delete后沒有[]是釋放數(shù)組的空間,以為這句話有錯就改成
delete []p;
后還想想好象也沒錯就劃了沒改,今天用了一小天的時間研究了下這個問題。
void main()
{
char *p=NULL;
p=new char[10];
delete[] p;
//delete p;
}
對于簡單的數(shù)據(jù)類型delete []p 和 delete p是一樣的。以為在p=new char[10]的時候在p前13-16位代表數(shù)組的大小(
前1-12位不知道表示啥)delete p可以知道數(shù)組的大小所以delete []p和delete p結(jié)果一樣。但對于對象數(shù)組就不一樣
了如:
void main()
{
class a
{
public :
char *m_pName;
a()
{
m_pName=new char[5];
cout<<"a()"< }
~a()
{
delete []m_pName;
cout<<"~a()"< }
};
a* c=NULL;
c=new a[2];
delete []c;
}
如果用delete c的話可以釋放a[0]的空間時執(zhí)行~a()結(jié)束時會報錯,具體原因沒查到。看見有的帖子說在<>和<>中有詳細的介紹??荚?大提示如果沒有析構(gòu)函數(shù)不報錯。
但還是new[] 和delete[]。new和delete成對的用好。
關(guān)于malloc和free是c語言里的new和delete是c++里的申請內(nèi)存操作。
char *p=NULL;
p=new char[10];
delete p;
這是道改錯題,在網(wǎng)上看到delete后沒有[]是釋放數(shù)組的空間,以為這句話有錯就改成
delete []p;
后還想想好象也沒錯就劃了沒改,今天用了一小天的時間研究了下這個問題。
void main()
{
char *p=NULL;
p=new char[10];
delete[] p;
//delete p;
}
對于簡單的數(shù)據(jù)類型delete []p 和 delete p是一樣的。以為在p=new char[10]的時候在p前13-16位代表數(shù)組的大小(
前1-12位不知道表示啥)delete p可以知道數(shù)組的大小所以delete []p和delete p結(jié)果一樣。但對于對象數(shù)組就不一樣
了如:
void main()
{
class a
{
public :
char *m_pName;
a()
{
m_pName=new char[5];
cout<<"a()"<
~a()
{
delete []m_pName;
cout<<"~a()"<
};
a* c=NULL;
c=new a[2];
delete []c;
}
如果用delete c的話可以釋放a[0]的空間時執(zhí)行~a()結(jié)束時會報錯,具體原因沒查到。看見有的帖子說在<
但還是new[] 和delete[]。new和delete成對的用好。
關(guān)于malloc和free是c語言里的new和delete是c++里的申請內(nèi)存操作。