0
点赞
收藏
分享

微信扫一扫

c++ || 内存分配

老榆 2022-04-17 阅读 119
c++

文章目录


本文来源《高质量C++编程》第7章

内存分配方式

  1. 静态存储区域分配
  1. 上创建
  1. 上分配(动态内存分配)

堆与栈的区别



指针与数组

指针与数组区别

  1. 修改内容
    修改内容
  2. 内容复制与比较
    复制与比较
  3. 计算内存容量
    容量

delete/new和free/malloc

  1. malloc和free是c++/c语言的标准库函数,new和delete是c++的运算符
  1. free和delete:把指针所指的内存给释放掉,并没有把指针本身干掉在这里插入图片描述
  1. malloc和free
void *malloc(size_t size);
int *p = (int*)malloc(sizeof(int)*length);
//1.类型转换:返回类型是void*,显示转换
//2.sizeof
  • free
    free(p):p是NULL指针,free对p操作多少次都不会出问题,p不是NULL指针,free对p连续操作两次会运行错误
  1. new和delete
int *p1 = (int*)malloc(sizeof(int)*length);
int *p2 = new int[length];
  • new创建对象数组,只能使用对象的无参构造函数
Obj *obj = new Obj[100];   //√
Obj *obj = new Obj[100](1);  //×
delete[]obj; //√
delete obj;  //× 相当于delete obj[0];

野指针

“野指针”不是NULL指针,是指向“垃圾”内存的指针。

  1. 出现:
  • 指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,缺省值是随机的。指针变量在创建的同时应当被初始化,要么设置为NULL,要么指向合法内存。
  • 指针p被free或delete后没有置为NULL。
  • 指针操作超越了变量的作用范围。

在这里插入图片描述

内存耗尽

动态分配内存时,new和malloc找不到足够大的内存快时返回NULL。
处理方法:

  1. 判断指针是否为NULL,是->return
  2. 判断指针是否为NULL,是->exit(1)
  3. 设置异常处理函数
举报

相关推荐

0 条评论