1、介绍

3个函数都在<stdlib.h>头文件
1)、void* malloc(unsigned size);
在内存的动态存储区中分配一块长度为size字节的连续区域,参数size为需要内存空间的长度,返回该区域的首地址,这里我们需要主要如果申请失败返回空指针
2)、void* realloc(void* ptr, unsigned newsize);  
给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度,地址可能会变
3)、void* calloc(size_t numElements, size_t sizeOfElement); 
参数sizeOfElement为申请地址的单位元素长度,numElements为元素个数,即在内存中申请numElements*sizeOfElement字节大小的连续地址空间
会将所分配的内存空间中的每一位都初始化为零,也就是说,如果你是为字符类型或整数类型的元素分配内存,那么这些元素将保证会被初始化为0
用完要记得释放内存
free(p);
p = NULL;
都在堆区分配内存,用完都需要释放,都是连续的分配内存

2、测试Demo

3个函数简单使用
#include <stdio.h>
#include <stdlib.h>//malloc、realloc、calloc简单使用int main()
{int *p1 = NULL;p1 = malloc(10 * sizeof(int));if (p1 != NULL){//给p1赋值for (int i = 0; i < 10; ++i){*(p1 + i) = 5;}//打印值for (int i = 0; i < 10; ++i){printf("p1[%d] is %d\n", i, p1[i]);}free(p1);p1 = NULL;}int *p2 = NULL;p2 = calloc(5, sizeof(int));if (p2 != NULL){for (int i = 0; i < 5; i++){printf("p2[%d] is %d\n", i, p2[i]);}free(p2);p2 = NULL;}char *p3, *q4;p3 = (char *)malloc(5);q4 = p3;p3 = (char *)realloc(p3, 10)if (p3 != NULL){printf("p3 is %p\n", p3);printf("q3 is %p\n", q4);p3 = (char *)realloc(p3, 1000);printf("p3 is %p\n", p3);free(p3);p3 = NULL;}return 0;
}

3、 运行结果

1111deMacBook-Pro:malloc a1111$ vim malloc.c
1111deMacBook-Pro:malloc a1111$ gcc -g malloc.c -o malloc
1111deMacBook-Pro:malloc a1111$ ./malloc
p1[0] is 5
p1[1] is 5
p1[2] is 5
p1[3] is 5
p1[4] is 5
p1[5] is 5
p1[6] is 5
p1[7] is 5
p1[8] is 5
p1[9] is 5
p2[0] is 0
p2[1] is 0
p2[2] is 0
p2[3] is 0
p2[4] is 0
p3 is 0x7ff323c01020
q3 is 0x7ff323c01020
p3 is 0x7ff323c03260

C和指针之动态内存分配malloc、calloc、realloc简单使用和区别相关推荐

  1. C语言学习笔记10-指针(动态内存分配malloc/calloc、realloc、释放free,可变数组实现;Tips:返回指针的函数使用本地变量有风险!;最后:函数指针)

    C语言:指针 1. 指针:保存地址的变量 *p (pointer) ,这种变量的值是内存的地址.   取地址符& 只用于获取变量(有地址的东西)的地址:scanf函数-取地址符   地址的大小 ...

  2. c语言malloc引用类型作参数,c语言中动态内存分配malloc只在堆中分配一片内存.doc...

    c语言中动态内存分配malloc只在堆中分配一片内存 .C语言中动态内存分配(malloc)只在堆中分配一片内存,返回一个void指针(分配失败则返回0),并没有创建一个对象.使用时需要强制转换成恰当 ...

  3. 关于动态内存分配malloc的初级用法和注意事项

    #include <stdio.h> #include <stdlib.h> int main(int argc, const char *argv[]) { /*your c ...

  4. C和指针之动态内存分配常见问题和总结

    1.动态内存分配常见问题       1) 结构体成员指针未初始化       2)为指针分配内存太小       3)内存分配成功,但是没初始化       4)内存越界,内存泄漏,free多次或者 ...

  5. linux c free大段内存,Linux C 动态内存分配--malloc,new,free及相关内容

    一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针 ...

  6. C和指针之动态内存分配之编程练习3

    1.问题 编写一个函数,从标准输入读取一个字符串,把字符串复制到动态内存分配的内存中,并返回该字符串的拷贝,这个函数不应该对读入字符串的长度作任何限制!             2.代码实现 #inc ...

  7. 内存分布malloc/calloc/realloc/free/new/delete、内存泄露、String模板、浅拷贝与深拷贝以及模拟string类的实现

    内存分布 一.C语言中的动态内存管理方式:malloc/calloc/realloc和free 1.malloc: 从堆上获得指定字节的内存空间,函数声明:void *malloc (int n); ...

  8. C和指针之动态内存分配之输入很多整数进行排序

    1.问题 读取一列整数,然后按升序排列它们,最后打印列表 2.代码实现 #include <stdio.h> #include <stdlib.h> /** 此函数根据你给的比 ...

  9. C++智能指针与动态内存分配

    智能指针 一般有三种智能智能指针:std::shared_ptr.std::unique_ptr和std::wek_ptr.std::shared_ptr允许多个指针共享内存对象,std::uniqu ...

最新文章

  1. scrapy爬虫框架初相识
  2. [C++] C++风格的强制类型转换探讨
  3. php 立即释放session 去除其缓存,ThinkPHP关于session无法清除的一个小问题
  4. Linux redhat下安装swftools(转载后修改)
  5. POJ - 2942 Knights of the Round Table (双连通分量)
  6. SRM 440(1-250pt, 1-500pt)
  7. iOS-MVVM-模式介绍
  8. html自动生成工具_「写论文神器」一个好用的论文自动生成工具,内含30w 文献数据...
  9. 北交大计算机保密专业,国内12所神秘的保密学院,毕业就是铁饭碗
  10. Android 串口开发
  11. 大数据平台常用组件_京东大数据平台进化之路
  12. 剖析:计算机专业大一学生如何学习C语言?如何自学C语言?大学C语言学习视频教程谁有?
  13. Gallery模块管理系统相册,支持从相册中选择图片或视频文件、保存图片或视频文件到相册等功能。通过plus.gallery获取相册管理对象
  14. Mac OS X 清除DNS缓存
  15. 【x11-forwarding disabled解决办法】
  16. python操作pdf——pdfplumber/PyPDF2
  17. 与《代码大全》齐名的经典著作 1
  18. 李烨_敏捷团队中QA角色的转变
  19. matlab中sparse和full函数的使用
  20. java-jar启动jar包

热门文章

  1. 基于事件驱动架构构建微服务第10部分:在docker容器内运行单元测试
  2. Dapr + .NET 实战(十-终篇)K8S运行Dapr
  3. 文末有彩蛋 | 第四周课程回顾与总结
  4. 如何从 dump 文件中提取出 C# 源代码?
  5. asp.net core监控—引入Prometheus(一)
  6. 回顾 | 进击吧! Blazor !第三期 信息交互
  7. Git 图形化操作之合并提交记录
  8. Blazor带我重玩前端(六)
  9. 写一个简版 asp.net core
  10. 一文了解Nuget的使用