C++内存管理
来源:互联网 发布:视频屏蔽广告软件 编辑:程序博客网 时间:2024/05/14 10:19
首先有几点综述:
1. 内存的本质是资源
2. 操作系统在掌管内存
3. 程序员能做的就是对内存进行申请和归还
申请和释放内存分别用到运算符:new(申请)和delete(释放)。
申请的方法:
//申请一个内存int *p=new int;//申请内存delete p;//释放内存
申请块内存的方法:
//申请和释放块内存int *arr=new int[10];//申请10个整型的内存空间delete []arr;//释放内存块
C语言中的内存申请和释放,用的是malloc函数。
void *malloc(size_t size);void free(void *memblock);如果在编程中,用new申请了内存,那就要用delete释放,用malloc申请就要用free来释放。
在申请时,实际上不一定是能够申请成功的,因为可能内存当时已经分配完了,我们要预见这种情况。
//申请失败时有反馈int *p=new int[1000];if(Null==p){//内存分配失败}
值得一说的是用Null==p这种语言风格更好,因为一不小心打成Null=p时,系统会报错,能预防一些错误。
那么,在释放内存时需要注意什么,
int *P=new int;if(NULL==p){//内存分配失败//异常处理}delete p;p=NULL;int *p=new int p[1000];if(NULL==p){//内存分配失败//异常处理}delete [p];p=NULL;即使申请失败内存,也要讲指针想申请的内存释放掉,并将其置空,避免重复回收等异常情况。
课后练习中,完成的作业能通过系统验证,但在VS2013中,却无法通过编译,代码如下:
#include<iostream>#include<stdlib.h>#include<string.h>using namespace std;int main(){//在堆中申请100个char类型的内存char *str = new char[100];//拷贝Hello C++字符串到分配的堆中的内存中strcpy(str, "Hello imooc");//打印字符串cout <<str<< endl;//释放内存delete[]str;str = NULL;system("pause");return 0;}
这是因为strcpy的安全性较低,微软在编译器中弃用了这个函数,用strcpy_s代替。如果坚持用的话,可以在int main()上一行添加西面代码:
#pragma warning(disable:4996);
即可编译通过。
0 0
- C/C++ 内存管理
- C内存管理函数
- C内存管理
- C内存管理
- object c 内存管理
- C 内存管理详解
- C 内存管理
- C语言内存管理
- c/c++内存管理
- c 的内存管理
- C内存管理
- Ojbective-c 内存管理
- C内存管理
- objective-c内存管理
- Objective-c 内存管理
- Objective-C内存管理~~
- c,c++内存管理
- Objective-C内存管理
- 外部储存篇
- 如何解决8080端口占用问题
- 内存分配-堆-栈-静态区
- 40-题目1064:反序数
- 数据库入门笔记
- C++内存管理
- 程序员的自我修养
- iOS webView 小用法
- Git忽略规则及.gitignore规则不生效的解决办法
- hdu1710 Binary Tree Traversals
- [Guava源码日报]Guava类库简介
- 【安装虚拟机和linux系统ubuntu14.04遇到的问题】
- LeetCode笔记:Move Zeros[Difficulty: Easy]
- ZOJ 2770 Burn the Linked Camp【差分约束 SPFA】