malloc函数和new操作(内含malloc新旧标准对比)
2010-07-18 14:19
309 查看
malloc函数和new操作均可以开辟一定的内存空间用以存储变量。但两者有以下几个不同:
1. malloc函数需要指定开辟的字节数,而new操作自动开辟相应大小的内存空间。
2. new操作返回指定类型的指针,而malloc函数返回void*,需要强制转换。
3. 回收内存时,一般malloc函数对应free函数,new操作对应delete操作,否则会引起memory leaking。
例如:
例一
int *p=NULL;
p=new int; //p指向一个int型变量,如果某系统中sizeof(int)是4个字节,那么p的值便是首地址
例二
int *p=NULL;
p=new int[100]; //p指向一个整型数组,p的地址是数组的首地址。
其中p++比p大一个整型的大小,比如4
p[1]是第二个整型的地址,注意和定义数组的区别。如果定义int p[100];那么p的值也是数组的首地址,但是p[i]的值就不是地址了。(试验后发现p[1]也是数组第二个数的值
)
例三
int *p=NULL;
p=(int*)malloc(sizeof(int));
旧的C标准中malloc返回char*,所以有时并不需要强制转换,新的ANSI C中返回空指针。
1. malloc函数需要指定开辟的字节数,而new操作自动开辟相应大小的内存空间。
2. new操作返回指定类型的指针,而malloc函数返回void*,需要强制转换。
3. 回收内存时,一般malloc函数对应free函数,new操作对应delete操作,否则会引起memory leaking。
例如:
例一
int *p=NULL;
p=new int; //p指向一个int型变量,如果某系统中sizeof(int)是4个字节,那么p的值便是首地址
例二
int *p=NULL;
p=new int[100]; //p指向一个整型数组,p的地址是数组的首地址。
其中p++比p大一个整型的大小,比如4
p[1]是第二个整型的地址,注意和定义数组的区别。如果定义int p[100];那么p的值也是数组的首地址,但是p[i]的值就不是地址了。(试验后发现p[1]也是数组第二个数的值
)
例三
int *p=NULL;
p=(int*)malloc(sizeof(int));
旧的C标准中malloc返回char*,所以有时并不需要强制转换,新的ANSI C中返回空指针。
相关文章推荐
- malloc/calloc/realloc/free与new/delete的对比
- 动态分配的标准写法(new, delete; malloc, free)
- malloc和new出来的地址都是虚拟地址 你就说内存管理单元怎么可能让你直接操作硬件内存地址!
- 动态分配的标准写法(new, delete; malloc, free)
- 动态分配的标准写法(new, delete; malloc, free)
- C++为什么new(malloc)操作会失败
- C++为什么new(malloc)操作会失败
- JDBC小结(附源码) 连接mysql 包含与ADO.net的操作对比及.net中的操作源码
- ExtJs与JQuery对比:Dom文档操作
- new/delete与malloc/free的区别是什么
- new/delete 和malloc/free 的区别
- 第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表、课程评论表、用户收藏表、用户消息表、用户学习表
- c中malloc与new的区别
- c++ 中new和c中的malloc的区别
- C++基础--malloc和new的区别
- 整理:new/delete和malloc/free的区别和联系
- HeapAlloc,GlobalAlloc,LocalAlloc,VirtualAlloc,malloc,new的异同
- malloc, free, new and delete
- C与C++中内存分配释放-malloc,free,new,delete
- malloc和new有什么区别