基本定义

new和malloc都是在堆上进行的内存分配,也称动态内存分配;

程序员自己负责在何时用 free 或 delete 释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。

new/delete

new和delete运算符用于动态内存分配和撤销内存;

1.单变量内存分配

int *a = new int;//将一个int类型的地址赋值给整型指针a

delete a;// 释放单个 int 的空间

int *a = new int (5);//作用同上,同时赋初值为5

delete a;

2.开辟数组空间

int *a = new int [100]; 开辟一个大小为 100 的整型数组空间

delete [] a; //释放int数组空间

new/delete是C++运算符;

new 返回指定类型的指针,

以具体类型为单位进行内存分配;

new可以初始化;

malloc/free

分配长度为 num_bytes 字节的内存块 ,分配成功则返回指向被分配内存的指针,否则返回空指针 NULL。

int* p = (int *) malloc (5*sizeof(int));//定义5个int型的内存空间,并强制返回int指针类型

free(p);//释放指针p

malloc/free 是 C++/C 语言的标准库函数;

malloc以字节为单位内存分配,需计算,如5*sizeof(int);

malloc默认返回voild*,返回时需强行转换为实际类型的指针;

不具备初始化特性;

常见内存错误

1.内存分配未成功

使用内存之前检查指针是否是null, 如if (p==NULL) 或 if (p!=NULL) ;

2.内存分配成功,但尚未初始化就使用

记得赋初值(内存的缺省初值究竟是什么并没有统一的标准);

3.内存分配成功并且已经初始化,但操作越过了内存的边界

例如在使用数组时经常发生下标 “多 1” 或者 “少 1” 。特别是在 for 循环语句中,循环次数很容易搞错,导致数组操作越界。

4..忘记释放内存,造成内存泄露

动态内存的申请与释放必须配对;

5.释放内存还继续使用它

用 free 或 delete 释放了内存之后,立即将指针设置为 NULL,防止产生 “野指针”。

参考

c语言中voild和int,C++的new和malloc相关推荐

  1. c语言中 static int,c语言中static unsigned int n=0;是什么意思?请大师指点迷津,学生有礼了。...

    c语言中static unsigned int n=0;是什么意思?请大师指点迷津,学生有礼了.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我 ...

  2. 在c语言中039是不是int型,C数据类型

    C的32个关键字数据类型关键字(12)char,short,int,long, float,double,unsigned,signed, struct,union,enum,void 控制语句关键字 ...

  3. c语言中char、int以及单引号与双引号的一些理解

    char strng[] = "12345";char x = 1;char x1 = '1';char x2[] = {1, 2, 3, 4, 5};char x3[] = {' ...

  4. C语言中用unsigned的作用,C语言中unsigned和int的计算

    有符号数和无符号数在一起运算,不要以为遵循的仍然是短的向长的靠齐.以前我们知道,如果一个short和一个int在一起运算, 首先编译器会将short自动转换为一个int类型中间变量,然后进行运算.但是 ...

  5. c语言中alloc作用,C语言内存分配 :malloc()函数与alloc()函数

    C语言跟内存分配方式 (1) 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. (2) 在栈上创建.在执行函数时,函数内局部变 ...

  6. c语言中int什么意思以及什么是无符号和有符号整型

    int 是整数类型,用于定义变量的类型,有符号,unsigned int 是无符号的整数类型,直白点说有符号无符号整型就是能不能存放负数. 根据程序编译器的不同,整形定义的字节数不同.51类单片机的C ...

  7. C语言中的strlen与sizeof的区别

    sizeof与strlen是有着本质的区别,sizeof是求数据类型所占的空间大小,而strlen是求字符串的长度,字符串以/0结尾.区别如下: (1) sizeof是一个C语言中的一个单目运算符,而 ...

  8. c语言用string类型,c语言中的string

    1. strlen(char const* s); 函数传入的是c风格字符串(即以'\0'结尾的字符数组),返回的长度为size_t(即unsigned int),其长度不包括'\0'. 2. str ...

  9. go语言中的int类型

    package mainimport ("fmt""math""time" )func main(){/* go语言中的整数类型 */// ...

最新文章

  1. GameMaker Studio从头开始学习设计和开发3款游戏
  2. codeforces 465 C. No to Palindromes!(暴力+思维)
  3. python代码示例下载-使用python3批量下载rbsp数据的示例代码
  4. ACM 模板--邻接表 有向图 搜索算法
  5. 在IIS中配置MIME类型组建Wap网站
  6. NSLog(@%@,类对象); 默认输出类名
  7. 【Java】switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上
  8. 音视频技术开发周刊 | 217
  9. [BZOJ4182]Shopping
  10. 编程算法 - 篱笆修理(Fence Repair) 代码(C)
  11. generator.xml mysql_Mybatis 使用generator.xml生成实体及mapper
  12. [JavaScript]面向对象编程
  13. android计算器实现sin功能,简单实现Android计算器功能
  14. WhereHows 安装
  15. 三类保留地址(私有地址)
  16. 0字节文件无法删除怎么办
  17. unity3D神奇bug,显示中文异常
  18. phalcon index.php,phalcon简易指南
  19. 0x00007FFE81272FE1 (ucrtbased.dll) (Project1.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x0000000000000000 时发
  20. 三相短路电流计算机算法的原理什么,三相短路电流的计算机算法

热门文章

  1. 软件测试办公工具推荐-桌面日历
  2. creo绘图属性模板_Proe_creo完整制作工程图格式和模板
  3. 【VFP] MS Virual FoxPro 9.0 | 常用命令 | VFP
  4. 现货黄金k线图分析方法有多少
  5. 联想Thinkbook Ubuntu18.04 安装nvidia显卡驱动
  6. 构造函数内部原理、原型讲解、写法、运用
  7. 企业项目管理的不同与好处
  8. Ubuntu20.04下CMake的安装(文章参考了各个博客,如有雷同,就是我的问题,旨在交流)
  9. java爬取酷狗榜单歌曲信息并存入数据库
  10. Vue 服务端渲染(SSR)