none
malloc 和 new 有区别吗? RRS feed

  • 问题

  •  

    void CGetMemory1Dlg::GetMemory(char *p)
    {
        p = (char*)malloc(100);
    }

    void CGetMemory1Dlg::GetMemory(char *p)
    {
        //p = (char*new(100);

        p = new char[100];
    }

     

    有区别吗?

     

    以下代码是有问题的, 如何更好的理解?

     

    void CGetMemory1Dlg:SurprisenBtntest()
    {
        char *str = NULL;
        GetMemory(str);
        strcpy(str, "hello world");
        printf(str);
    }

    void CGetMemory1Dlg::GetMemory(char *p)
    {
         // p = (char*)malloc(100);
         p = new char[100];
    }

    2009年1月8日 9:45

答案

  •  

    new  和 delete 是 C++ 提供的运算符,用来取代 C 语言的 malloc 和 free 函数,为了与C语言兼容,在 C++ 中保留了这两个函数。

    2009年1月8日 9:56
  • 你可以将new其实包含malloc调用,STRUCT *pStruct = new STRUCT;你可以想象成下面的代码:

    STRUCT *pStruct = (STRUCT *)malloc(sizeof(STRUCT));

    STRUCT(*pStruct); // 调用构造函数。

     

     

    2009年1月8日 12:44
  • 若是为char分配内存,两者是一样的.

    它们的区别其实很明显,malloc只是分配内存,而new不仅分配内存,若是类,还会调用类的构造函数。^o^

    2009年1月8日 12:46
    版主
  •  

    new 是分配连续的内存空间,如果内存不足时,new可能会有问题

    mallc可以分配不连续的内存空间

    2009年1月8日 14:22
  • new 分配在堆上,malloc分配在自由存储区。

    new先调用new operator分配内存,然后依次调用继承树上的构造函数。

    new用delete释放。

    malloc用free释放。

    2009年1月9日 1:09
    版主

全部回复

  •  

    new  和 delete 是 C++ 提供的运算符,用来取代 C 语言的 malloc 和 free 函数,为了与C语言兼容,在 C++ 中保留了这两个函数。

    2009年1月8日 9:56
  • 你可以将new其实包含malloc调用,STRUCT *pStruct = new STRUCT;你可以想象成下面的代码:

    STRUCT *pStruct = (STRUCT *)malloc(sizeof(STRUCT));

    STRUCT(*pStruct); // 调用构造函数。

     

     

    2009年1月8日 12:44
  • 若是为char分配内存,两者是一样的.

    它们的区别其实很明显,malloc只是分配内存,而new不仅分配内存,若是类,还会调用类的构造函数。^o^

    2009年1月8日 12:46
    版主
  •  

    new 是分配连续的内存空间,如果内存不足时,new可能会有问题

    mallc可以分配不连续的内存空间

    2009年1月8日 14:22
  • new 分配在堆上,malloc分配在自由存储区。

    new先调用new operator分配内存,然后依次调用继承树上的构造函数。

    new用delete释放。

    malloc用free释放。

    2009年1月9日 1:09
    版主