这几个都是动态申请空间用到的关键字。
malloc定义:百度百科
calloc定义:百度百科
new定义:百度百科 、博客园FutureNow这个人整理的挺好的。
malloc和calloc的区别:
-
功能:动态分配内存;
-
注意:size仅仅为申请内存字节大小, 与申请内存块中存储的数据类型无关,故编程时建议通过以下方式给出,"长度 * sizeof(数据类型)"; [2]
calloc的用法:
calloc()函数为nmemb个元素的数组分配内存空间,其中,每个元素的长度都是size个字节。如果要求的空间无效,那么此函数返回 指针。在分配了内存之后,calloc()函数会通过将所有位设置为0的方式进行初始化。比如,调用calloc()函数为n个整数的数组分配存储空间,且保证所有整数初始化为0:
以上两个进行动态分配的空间,用完了之后需要人为的进行动态的释放。
通常是使用free函数进行内存的释放。或者使用realloc进行内存的释放,realloc也可以对使用的内存进行修改。
free的使用注意事项:free函数与malloc()函数配对使用,malloc函数释放申请的动态内存。对于free(p)这句语句,如果p 是NULL 指针,那么free 对p 无论操作多少次都不会出问题。如果p 不是NULL 指针,那么free 对p连续操作两次就会导致程序运行错误。
下面有realloc函数的使用方式:
#include<malloc.h> voidmain() { char*p,*q; p=(char*)malloc(10); q=p; p=(char*)realloc(q,20);//A行,通过realloc扩大p的空间,并把新的地址赋值给p。 //………………………… }
free是和malloc、realloc、calloc函数成对出现的,来保证动态分配的空间及时释放。
在分配内存的时候用的是new,在释放的时候就需要使用delete/delete[];
malloc和new的区别:
new的具体使用方式如下: 类型 *变量名 = new 类型; delete 变量 / delete[] 变量; 类型包括数组、结构体和类等等。
C++中new可以动态分配内存,这和C语言中malloc的作用类似。但不同的是new创建类的时侯会自动调用构造函数,而malloc则不会。
因此C++中一般使用new来进行动态分配内存,与malloc一样用new分配的内存可以需要释放,但并不是使用free来释放,而是使用delete来释放。同样delete会自动调用析构函数,而free则不会。
new 返回指定类型的指针,并且可以自动计算所需要大小。而 malloc 则必须要由我们计算字节数,并且在返回后强行转换为实际类型的指针。
除了分配以及最后释放的方式不一样之外,通过malloc或new得到的指针,在其它操作上保持一致。