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