浅谈malloc与 calloc、realloc、new 的区别
2010-04-24 23:51
573 查看
写此文章,主要是让初学者,能够清楚的认识malloc,calloc, realloc,与new之间的区别
相关函数原型:
#include <stdlib.h>
void *calloc(size_t nmemb, size_t size);
void *malloc(size_t size);
void free(void *ptr);
void *realloc(void *ptr, size_t size);
1. Malloc
作 用:
Malloc用于动态申请存储空间,它不是关键字,而是一个申请内存的函数
用 法:
Malloc
返回一块内存地址的指针,否则会返回空指针null,这里要注意的是,当内存不再使用的时候,用free()函数进行对内存的释放。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
char *str;
if((str=malloc(20)) == NULL)
{
printf("malloc is failed./n");
exit(1);
}
strcpy(str, "hello world!");
printf("String is %s /n", str);
free(str);
return 0;
}
2.calloc
作
用:calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。
例 子:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char *str = NULL;
str = calloc(15, sizeof(char));
strcpy(str, "hello world!");
printf("String is %s /n", str);
free(str);
return 0;
}
3.realloc
作 用:重新分配内存空间。
例 子:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char *str;
str = malloc(10);
strcpy(str, "hello world.");
printf("String is %s /n. Address is %p /n", str, str);
str = realloc(str, 20);
printf("String is %s /n. New Address is %p /n", str, str);
free(str);
return 0;
}
"
4.总结:
malloc: 动态分配size字节空间,返回它的指针。(此函数不能初始化内存空间)
calloc:动态分配n个连续的size字节空间,返回第一个指针。它有两个参数,分别为参数的数目,和每个参数的大小,那么这两个参
数的乘积就是这个分配空间的大小。(此函数可以初始化内存空间)
realloc:将指针指向的内存空间扩展成n个,把它放在最后解释因为偶不建议使用,确实要用也要考虑多种情况。
free:释放上述两函数分配的空间;
malloc与new :
1 、new 建立的是一个对象,malloc 分配的是一块内存。
2、malloc申请的是heap区的内存空间,返回的是指针。new
建立的对象你可以把它当成一个普通的对象,用成员函数访问,不要直接访问它的地址空间。(注意用delete释放空间)。
3、malloc/free是C/C++中的方法(函数),new/delete是C++中的操作符。
4、使用free之前要判断,使其free的指针是!NULL的,使用delete则无须判断。
5、free掉的内存是该指针指向的一段内存空间,里面应该是空的。而delete掉的内存是里面确实存有数据或者对象的。
最后要注意的是malloc和free
、new和delete成对使用,以免不必要的麻烦。
相关函数原型:
#include <stdlib.h>
void *calloc(size_t nmemb, size_t size);
void *malloc(size_t size);
void free(void *ptr);
void *realloc(void *ptr, size_t size);
1. Malloc
作 用:
Malloc用于动态申请存储空间,它不是关键字,而是一个申请内存的函数
用 法:
Malloc
返回一块内存地址的指针,否则会返回空指针null,这里要注意的是,当内存不再使用的时候,用free()函数进行对内存的释放。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
char *str;
if((str=malloc(20)) == NULL)
{
printf("malloc is failed./n");
exit(1);
}
strcpy(str, "hello world!");
printf("String is %s /n", str);
free(str);
return 0;
}
2.calloc
作
用:calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。
例 子:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char *str = NULL;
str = calloc(15, sizeof(char));
strcpy(str, "hello world!");
printf("String is %s /n", str);
free(str);
return 0;
}
3.realloc
作 用:重新分配内存空间。
例 子:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char *str;
str = malloc(10);
strcpy(str, "hello world.");
printf("String is %s /n. Address is %p /n", str, str);
str = realloc(str, 20);
printf("String is %s /n. New Address is %p /n", str, str);
free(str);
return 0;
}
"
4.总结:
malloc: 动态分配size字节空间,返回它的指针。(此函数不能初始化内存空间)
calloc:动态分配n个连续的size字节空间,返回第一个指针。它有两个参数,分别为参数的数目,和每个参数的大小,那么这两个参
数的乘积就是这个分配空间的大小。(此函数可以初始化内存空间)
realloc:将指针指向的内存空间扩展成n个,把它放在最后解释因为偶不建议使用,确实要用也要考虑多种情况。
free:释放上述两函数分配的空间;
malloc与new :
1 、new 建立的是一个对象,malloc 分配的是一块内存。
2、malloc申请的是heap区的内存空间,返回的是指针。new
建立的对象你可以把它当成一个普通的对象,用成员函数访问,不要直接访问它的地址空间。(注意用delete释放空间)。
3、malloc/free是C/C++中的方法(函数),new/delete是C++中的操作符。
4、使用free之前要判断,使其free的指针是!NULL的,使用delete则无须判断。
5、free掉的内存是该指针指向的一段内存空间,里面应该是空的。而delete掉的内存是里面确实存有数据或者对象的。
最后要注意的是malloc和free
、new和delete成对使用,以免不必要的麻烦。
相关文章推荐
- (zz)浅谈malloc与calloc、realloc、new 的区别
- malloc、calloc、realloc、new以及alloca函数区别
- 浅谈realloc,malloc,calloc的区别
- malloc calloc realloc,new区别联系以及什么时候用(转)
- malloc calloc realloc,new区别联系以及什么时候用
- 浅谈malloc与 kmalloc、cmalloc、realloc、new 的区别
- 浅谈malloc与 kmalloc、cmalloc、realloc、new 的区别
- 论C语言的malloc,calloc,new,realloc,alloca的机制和区别
- malloc calloc realloc,new区别联系以及什么时候用
- alloca malloc calloc realloc,new区别联系以及什么时候用
- malloc、calloc、realloc以及new的区别与联系
- malloc calloc realloc,new区别联系以及什么时候用
- malloc、calloc、realloc的区别
- malloc、realloc和calloc的区别
- malloc、calloc、realloc的区别
- 2010-09-25 13:39 浅谈内存分配malloc,calloc,realloc
- malloc calloc realloc alloc区别
- C语言 malloc calloc realloc 区别
- new, calloc和malloc的区别
- malloc calloc realloc 作用、用法、区别、实现原理