C++动态内存分配

时间:2022-04-08 20:01:39

C++ 程序中的内存分为两个部分:

  • 栈:在函数内部声明的所有变量都将占用栈内存。
  • 堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存。

很多时候,您无法提前预知需要多少内存来存储某个定义变量中的特定信息,所需内存的大小需要在运行时才能确定。在 C++ 中,您可以使用特殊的运算符为给定类型的变量在运行时分配堆内的内存,这会返回所分配的空间地址。这种运算符即 new 运算符。如果您不再需要动态分配的内存空间,可以使用 delete 运算符,删除之前由 new 运算符分配的内存。

如果堆内存已使用完,则可能无法成功分配内存,所以可以检查new运算符返回的指针是否为空指针:

double* pvalue = NULL;
if (!(pvalue = new double))
{
    cout << "out of memory." << endl;
    exit(1);
}

new和malloc()区别

malloc() 函数在 C 语言中就出现了,在 C++ 中仍然存在,但建议尽量不要使用 malloc() 函数。new 与 malloc() 函数相比,其主要的优点是,new 不只是分配了内存,它还创建了对象。

C++动态内存分配

 

数组的动态内存分配

double* pvalue = NULL;
pvalue = new double[20];
delete[] pvalue;