C++ newdelete, new []delete[]动态内存管理以及指针数组的分配与释放

    技术2023-07-24  72

    1、new/delete, new []/delete[]动态内存管理

    AA* pA = new pA; delete pA; AA* pA = new AA[10]; delete[] pa;

    malloc/free和new/delete的区别和联系   * malloc/free只是动态分配内存空间/释放空间。而new/delete除了分配空间还会调用构造函数和析构函数进行初始化与清理(清理成员)。

    * 它们都是动态管理内存的入口。   * malloc/free是C/C++标准库的函数,new/delete是C++操作符。   * malloc/free需要手动计算类型大小且返回值w为void*,new/delete可自动计算类型的大小,返回对应类型的指针。

    * malloc/free管理内存失败会返回0,new/delete等的方式管理内存失败会抛出异常。

    2、指针数组的分配与释放

    //分配内存 const char** sWordList = new const char*[JWordList.size()]; for (int i = 0; i < JWordList.size(); i++) { sWordList[i] = (new string(to_string(i+1) + "#" + JWordList[i].asString()))->c_str(); } //释放内存 for (int i = 0; i < JWordList.size(); i++) { delete sWordList[i]; sWordList[i] = NULL; } delete[] sWordList; sWordList = NULL; //分配内存 char** pStrArray = new char*[n]; for (int i=0;i<n;i++) { pStrArray [i] = new char[5]; // 也是数组 cin>>pStrArray [i]; } //释放内存 for (int i=0;i<n;i++) { delete[] pStrArray[i]; // 所以这里用delete pStrArray[i] = NULL; } delete pStrArray; pStrArray = NULL;
    Processed: 0.014, SQL: 9