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

