part03-动态内存分配

Posted flying_1314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了part03-动态内存分配相关的知识,希望对你有一定的参考价值。

目录

1、背景

2、new运算符实现动态内存分配

1>分配一个变量

2>分配一个数组

3、delete 运算符释放new分配的动态内存空间

1>释放动态分配的变量

2>释放动态分配的数组


1、背景

动态内存分配存在的意义就是更高效的利用内存空间,简单来说,用多少给多少,而不是提前开辟很大的内存空间,但不用那么多,类似数组。c语音通过malloc来实现,那么c++呢?

2、new运算符实现动态内存分配

1>分配一个变量

P = new T;

T 是任意的类型名, P 是T * 的指针。

动态分配出一片大小为sizeof(T)字节的内存空间,并且将该内存空间的起始地址赋值给P,如下

int * p;
p = new int;
*p = 1;

例题1.1

表达式 “new int”的返回值类型是:

  • A) int

  • B) int *

  • C) int &

  • D) void

2>分配一个数组

P = new T[N];

T: 任意类型名

P: 类型为T*的指针

N: 要分配的数组元素个数,可以是整形表达式

动态分配出一片大小为N * sizeof(T)字节的内存空间,并且将该内存空间的起始地址赋值给P,示例如下

int * p;
int i = 5;
p = new int[i*20];
p[0] = 1;
p[100] = 2;//编译ok,运行报错,数组越界,只能0-99

小结一下:

📢:1>P = new T;

         2>P = new T[N];

         他们的返回值都是T*

3、delete 运算符释放new分配的动态内存空间

万物皆有轮回,有new来创建,对应的就有delete来释放。

1>释放动态分配的变量

用new创建的内存空间,一定要用delete来释放掉!

delete 指针;//该指针必须指向new出来的空间

int *p = new int;
*p = 1;
delete p;
delete p;//异常;同一片内存空间不能被delete多次

2>释放动态分配的数组

delete [] 指针;//该指针必须指向new出来的数组

int * p = new int[20];
p[0] = 1;
delete []p;

例题1.2

下面小段程序,哪个是正确的:

A) char * p = new int; 

p = 'a';  

delete p;

B) int *p = new int[25]; 

   p[10] = 100; 

   delete p;

C) char * p = new char[10];       

   p[0] = 'K'; 

   delete [] p;

D)都不对?

例题的答案,和之前一样,会放到评论区~

以上是关于part03-动态内存分配的主要内容,如果未能解决你的问题,请参考以下文章

part03-动态内存分配

动态内存分配

动态内存分配

用C语言分配开辟内存问题

C语言动态内存分配

动态开辟内存的这些知识你知道了吗?了解柔性数组吗?超详细画图以及文字讲解,干货满满