Fork me on GitHub

内存管理

---------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 = new int;//也可以这样赋值 int *p=new int(20);

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

{

system("pause");

return 0;

}

*p = 20;

cout << *p << endl;

delete p;

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

system("pause");

return 0;

}

   

//申请块内存

//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】

posted on 2017-02-16 18:19  siwuxie095  阅读(131)  评论(0编辑  收藏  举报

导航