calloc、malloc、realloc函数的区别及用法

calloc、malloc、realloc函数的区别及用法calloc malloc realloc 函数的区别及用法 三者都是分配内存 都是 stdlib h 库里的函数 但是也存在一些差异 1 malloc 函数 其原型 void malloc unsignedintn bytes num byte 为要申请的空间大小 需要我们手动的去计算 如 int p int malloc

                          calloc、malloc、realloc函数的区别及用法!

三者都是分配内存,都是stdlib.h库里的函数,但是也存在一些差异。

实例:

    int *p = (int *)malloc(20*sizeof(int));     int *pp = (int *)calloc(20, sizeof(int));     int i;          printf("malloc申请的空间值:\n\n");     for ( i=0 ; i < 20; i++)     {         printf("%d ", *p++);     }     printf("\n\n");     printf("calloc申请的空间的值:\n\n");     for ( i=0 ; i < 20; i++)     {         printf("%d ", *pp++);     }     printf("\n");

结果:

calloc、malloc、realloc函数的区别及用法

int main(void) {     const int size = 2000;     int *p = (int *)malloc(20*sizeof(int));     int *pp = (int *)realloc(p, size*sizeof(int));          printf("原来的p_Address:%x   扩容后的pp_Address:%x \n\n", p, pp);          return 0; }

calloc、malloc、realloc函数的区别及用法

可从图看出,扩容后地址和原先地址是不一样的,但是这仅仅取决于扩容的内存大小。

实际上:

如果size较小,原来申请的动态内存后面还有空余内存,系统将直接在原内存空间后面扩容,并返回原动态空间基地址;如果size较大,原来申请的空间后面没有足够大的空间扩容,系统将重新申请一块(20+size)*sizeof(int)的内存,并把原来空间的内容拷贝过去,原来空间free;如果size非常大,系统内存申请失败,返回NULL,原来的内存不会释放。注意:如果扩容后的内存空间较原空间小,将会出现数据丢失,如果直接realloc(p, 0);相当于free(p).

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/200956.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午10:15
下一篇 2026年3月20日 上午10:15


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号