C语言malloc()函数与calloc()函数的区别

推荐博客:

推荐博客:https://blog.csdn.net/ddcodingya/article/details/80452397

推荐博客:https:https://blog.csdn.net/Hackbuteer1/article/details/6789164

函数malloc()和函数colloc()都可以用来动态分配内存空间.

malloc() 函数有一个参数,是需要分配空间的大小(单位是字节)

 char *mem = (char *)malloc(sizeof(char)*newsize);    //开辟内存

calloc()函数有两个参数,第一个参数是元素的数目,第二个是每个元素的大小

<1>从静态存储区域分配.
       内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量、static变量.
<2>在栈上创建
       在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限.

<3>从堆上分配,亦称动态内存分配.
       程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存.动态内存的生存期由用户决定,使用非常灵活,但问题也最多.

关于函数使用需要注意的一些地方:

头文件:malloc.h或者stdlib.h

A、申请了内存空间后,必须检查是否分配成功。

B、当不需要再使用申请的内存时,记得释放;释放后应该把指向这块内存的指针指向NULL,
防止程序后面不小心使用了它。

C、这两个函数应该是配对。如果申请后不释放就是内存泄露;如果无故释放那就是什么也没有做。
释放只能一次,如果释放两次及两次以上会

出现错误(释放空指针例外,释放空指针其实也等于啥也没做,所以释放空指针释放多少次都没有问题)。

D、虽然malloc()函数的类型是(void *),任何类型的指针都可以转换成(void *),
但是最好还是在前面进行强制类型转换,因为这样可以躲过一些编译器的检查。

猜你喜欢

转载自blog.csdn.net/USA_AM_1966/article/details/83713616