内存管理

本文介绍了C++中的内存管理概念,包括内存资源的申请与释放,使用new与delete运算符的具体方法,以及在C语言中使用malloc与free函数的区别。文章还强调了内存操作时需要注意的问题,例如内存申请可能失败及释放内存后的指针置空操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

---------siwuxie095

  

  

  

  

C++内存管理:

  

内存的本质,其实就是一种资源,是写程序时

所用到的必需的一种资源

  

这种资源由操作系统进行掌控,人所能做的就是申请

和归还这种资源

  

当需要时向操作系统申请内存资源,当用完后,就要

把相应的资源再归还给操作系统,这样的一个过程就

称之为内存管理

  

  

  

  

  

  

内存的申请和释放:

  

申请内存要使用运算符new,释放内存要使用运算符delete

  

new 和 delete 是一种运算符,而不是函数

  

  

  

  

  

具体使用方式:

  

申请内存:定义一个指针,用指针来接收new 运算符申请到的内存地址

  

释放内存:delete 运算符后跟相应的指针即可

  

  

  

  

上面只是申请和释放一个内存 或叫 某一个类型的内存,

如果要申请和释放一块内存:

  

  

注意:释放块内存时,delete 后要跟一个中括号,

中括号后跟的是当时申请时使用的指针

  

如果不加中括号,在释放时,只能释放arr 指向的第一个内存,

后面的 9 个内存都无法释放

  

  

  

内存操作注意事项:

  

  

在 C 语言中:

使用malloc 和 free 函数申请和释放内存,注意是函数,不是运算符

  

〔malloc 全称:memory allocation〕

  

  

而 C++:

  

  

如果使用 new 来申请内存,必须要使用 delete 来释放

如果使用malloc 来申请内存,必须要使用 free 来释放

  

  

  

  

  

申请内存注意事项:

  

申请内存不一定会成功,有可能是附带风险的,因为操作系统

现在的内存已经用完了,没有办法给你更多的内存

  

  

  

  

那么在编码时就要对这种情况进行处理:

  

  

  

  

释放内存注意事项:

  

  

  

如:单个内存与块内存

  

  

除了要判断申请内存时分配失败的情况外,在释放内存时

也要注意匹配

  

释放完内存后,要将相应的指针赋值空,

以避免很多莫名其妙的错误

  

如果不置为空,当前的指针还指向相应的那块内存,如果

不小心又调用了一次delete,就会使得同一块内存被重复

回收,一旦被重复回收,计算机就会出现异常

  

  

  

最后:

  

  

  

  

程序:

  

#include <stdlib.h>

#include <iostream>

using namespace std;

  

  

//申请一个内存

int main(void)

{

//在堆中申请内存

int *p = newint;//也可以这样赋值 int *p=new int(20);

if (NULL==p)//判断内存是否申请成功

{

system("pause");

return0;

}

*p = 20;

cout << *p << endl;

delete p;

p = NULL;//将指针置于安全状态

system("pause");

return0;

}

  

//申请块内存

//int main(void)

//{

// int *p = new int[100];

// if (NULL == p)

// {

// system("pause");

// return 0;

// }

// p[0] = 10;

// p[1] = 20;

// cout << p[0] << "," << p[1] << endl;

// delete []p;

// p = NULL;

// system("pause");

// return 0;

//}

  

vs2013中:

  

  

  

  

  

【made by siwuxie095】

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值