c语言中voild和int,C++的new和malloc

基本定义

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,防止产生 “野指针”。

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值