申請(qǐng)內(nèi)存空間,delete和delete[]的區(qū)別

字號(hào):

一道面試題是關(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)存操作。