找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

C++学习Tips(七)动态内存

admin 2019-10-10 06:28 91人围观 C++相关



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

  • 栈:在函数内部声明的所有变量都将占用栈内存。

  • 堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存。

很多时候,您无法提前预知需要多少内存来存储某个定义变量中的特定信息,所需内存的大小需要在运行时才能确定。

在 C++ 中,您可以使用new运算符为给定类型的变量在运行时分配堆内的内存,这会返回所分配的空间地址;如果您不再需要动态分配的内存空间,可以使用 delete 运算符,删除之前由 new 运算符分配的内存。

1、new运算符

使用 new 运算符来为任意的数据类型动态分配内存的通用语法为:

new data-type;

在这里,data-type 可以是包括数组在内的任意内置的数据类型,也可以是包括类或结构在内的用户自定义的任何数据类型。

如果自由存储区已被用完,可能无法成功分配内存。所以建议检查 new 运算符是否返回 NULL 指针,并采取类似以下的适当操作:

double* ptr = NULL;

if( NULL == (ptr = new double))

{

    cout << "Error: out ofmemory." <<endl;

    exit(1);

}

2、delete运算符

在任何时候,当您觉得某个已经动态分配内存的变量不再需要使用时,您可以使用 delete 操作符释放它所占用的内存,如下所示:

delete ptr;        // 释放 ptr 所指向的内存

3、数组的动态内存分配

1) 一维数组示例

// 动态分配,数组长度为 m

int *array=new int [m];

//释放内存

delete [] array;

2) 二维数组示例

// 假定数组第一维长度为 m, 第二维长度为 n

int **array;

// 动态分配空间

array = new int *[m];

for( int i=0; i<m; i++ )

{

array[i] = new int [n];

}

//释放

for( int i=0; i<m; i++ )

{

delete [] array[i];

}

delete [] array;

3) 三维数组示例

// 假定数组第一维为 m, 第二维为 n, 第三维为h

int ***array;

// 动态分配空间

array = new int **[m];

for( int i=0; i<m;i++ )

{

array[i] = new int *[n];

for( int j=0; j<n; j++ )

{

array[i][j] = new int [h];

}

}

//释放

for( int i=0; i<m;i++ )

{

for( int j=0; j<n; j++ )

{

delete array[i][j];

}

delete array[i];

}

delete [] array;






----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:IT真经,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

yafeilinux和他的朋友们微信公众号二维码

微信公众号

专注于Qt嵌入式Linux开发等。扫一扫立即关注。

Qt开源社区官方QQ群二维码

QQ交流群

欢迎加入QQ群大家庭,一起讨论学习!

我有话说......