C++内存管理
2016-03-04 22:23
218 查看
首先有几点综述:
1. 内存的本质是资源
2. 操作系统在掌管内存
3. 程序员能做的就是对内存进行申请和归还
申请和释放内存分别用到运算符:new(申请)和delete(释放)。
申请的方法:
申请块内存的方法:
C语言中的内存申请和释放,用的是malloc函数。
在申请时,实际上不一定是能够申请成功的,因为可能内存当时已经分配完了,我们要预见这种情况。
值得一说的是用Null==p这种语言风格更好,因为一不小心打成Null=p时,系统会报错,能预防一些错误。
那么,在释放内存时需要注意什么,
课后练习中,完成的作业能通过系统验证,但在VS2013中,却无法通过编译,代码如下:
这是因为strcpy的安全性较低,微软在编译器中弃用了这个函数,用strcpy_s代替。如果坚持用的话,可以在int main()上一行添加西面代码:
即可编译通过。
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);
即可编译通过。
相关文章推荐
- c++ primer 第五版的Sales_data类
- jnaerator命令行生成bridj的包(java调用c++动态链接库)
- C、C++中的隐式转换和显示转换
- C语言中一些对文件操作的函数总结
- 全排列(含查重)
- C++ 优先队列
- C++中函数传递数组的探索
- C/C++的内存处理函数
- C++ Primer Plus读书笔记
- C++设计模式之原型模式
- C++ STL map I don't want it to sort!
- C++ STL map I don't want it to sort!
- [C/C++]在头文件中使用static定义变量意味着什么
- 知乎-怎样算是精通c++
- c++第一次作业
- C++中的RAII机制详解
- C/C++程序员面试宝典备忘录
- 经验分享从c到c++
- C++之多继承
- C++之多继承