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,防止产生 “野指针”。
参考
c语言中voild和int,C++的new和malloc相关推荐
- c语言中 static int,c语言中static unsigned int n=0;是什么意思?请大师指点迷津,学生有礼了。...
c语言中static unsigned int n=0;是什么意思?请大师指点迷津,学生有礼了.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我 ...
- 在c语言中039是不是int型,C数据类型
C的32个关键字数据类型关键字(12)char,short,int,long, float,double,unsigned,signed, struct,union,enum,void 控制语句关键字 ...
- c语言中char、int以及单引号与双引号的一些理解
char strng[] = "12345";char x = 1;char x1 = '1';char x2[] = {1, 2, 3, 4, 5};char x3[] = {' ...
- C语言中用unsigned的作用,C语言中unsigned和int的计算
有符号数和无符号数在一起运算,不要以为遵循的仍然是短的向长的靠齐.以前我们知道,如果一个short和一个int在一起运算, 首先编译器会将short自动转换为一个int类型中间变量,然后进行运算.但是 ...
- c语言中alloc作用,C语言内存分配 :malloc()函数与alloc()函数
C语言跟内存分配方式 (1) 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. (2) 在栈上创建.在执行函数时,函数内局部变 ...
- c语言中int什么意思以及什么是无符号和有符号整型
int 是整数类型,用于定义变量的类型,有符号,unsigned int 是无符号的整数类型,直白点说有符号无符号整型就是能不能存放负数. 根据程序编译器的不同,整形定义的字节数不同.51类单片机的C ...
- C语言中的strlen与sizeof的区别
sizeof与strlen是有着本质的区别,sizeof是求数据类型所占的空间大小,而strlen是求字符串的长度,字符串以/0结尾.区别如下: (1) sizeof是一个C语言中的一个单目运算符,而 ...
- c语言用string类型,c语言中的string
1. strlen(char const* s); 函数传入的是c风格字符串(即以'\0'结尾的字符数组),返回的长度为size_t(即unsigned int),其长度不包括'\0'. 2. str ...
- go语言中的int类型
package mainimport ("fmt""math""time" )func main(){/* go语言中的整数类型 */// ...
最新文章
- GameMaker Studio从头开始学习设计和开发3款游戏
- codeforces 465 C. No to Palindromes!(暴力+思维)
- python代码示例下载-使用python3批量下载rbsp数据的示例代码
- ACM 模板--邻接表 有向图 搜索算法
- 在IIS中配置MIME类型组建Wap网站
- NSLog(@%@,类对象); 默认输出类名
- 【Java】switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上
- 音视频技术开发周刊 | 217
- [BZOJ4182]Shopping
- 编程算法 - 篱笆修理(Fence Repair) 代码(C)
- generator.xml mysql_Mybatis 使用generator.xml生成实体及mapper
- [JavaScript]面向对象编程
- android计算器实现sin功能,简单实现Android计算器功能
- WhereHows 安装
- 三类保留地址(私有地址)
- 0字节文件无法删除怎么办
- unity3D神奇bug,显示中文异常
- phalcon index.php,phalcon简易指南
- 0x00007FFE81272FE1 (ucrtbased.dll) (Project1.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x0000000000000000 时发
- 三相短路电流计算机算法的原理什么,三相短路电流的计算机算法
热门文章
- 软件测试办公工具推荐-桌面日历
- creo绘图属性模板_Proe_creo完整制作工程图格式和模板
- 【VFP] MS Virual FoxPro 9.0 | 常用命令 | VFP
- 现货黄金k线图分析方法有多少
- 联想Thinkbook Ubuntu18.04 安装nvidia显卡驱动
- 构造函数内部原理、原型讲解、写法、运用
- 企业项目管理的不同与好处
- Ubuntu20.04下CMake的安装(文章参考了各个博客,如有雷同,就是我的问题,旨在交流)
- java爬取酷狗榜单歌曲信息并存入数据库
- Vue 服务端渲染(SSR)