malloc,free,calloc,realloc函数
malloc函数
- 原型:extern void* malloc(unsigned int size);
- 功能:动态分配内存;
注意:size仅仅为申请内存字节大小,与申请内存块中存储的数据类型无关,故编程时需要通过以下方式给出:"长度 * sizeof(数据类型)";
示例:
//动态分配内存,输入5个数据,并把低于60的值打印出来
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *ptr = (int *)malloc(5 * sizeof(int));//分配内存
for (int i = 0; i < 5; i++)
{
scanf_s("%d", &ptr[i]);//输入数据
}
int min = 60;
for (int i = 0; i < 5; i++)
{
if (min > *(ptr + i))
printf("%5d", *(ptr + i));//打印出低于60的值
}
free(ptr);
system("pause");
return 0;
}
free函数
- 原型:void free(void * ptr);
- 功能:搭配malloc()函数,释放malloc函数申请的动态内存;
- 注意:对于free(ptr),若ptr为NULL,则可进行多次释放,若ptr是非空指针,则free对ptr只能进行一次操作,否则程序将崩溃;
- 示例:见malloc函数;
- 结果:见malloc函数;
realloc函数
- 原型: void* realloc(void * ptr,unsigned int size);
- 功能:先判断当前指针是否有足够的连续空间,若足够,扩大ptr指向的地址并返回,若不够,怎按size指定的大小分配空间,将原数据copy到新分配的内存中,然后释放原ptr所指向区域;
- 注意:内存使用完毕后,应使用free()函数释放,但原来的指针是自动释放,不需要使用free;
- 示例:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *str;
/* 一开始的内存分配 */
str = (char *)malloc(15);
strcpy(str, "Hello World!");
printf("String = %s\n", str);
/* 重新分配内存 */
str = (char *)realloc(str, 25);
strcat(str, ", C");
printf("String = %s\n", str);
free(str);
system("pause");
return 0;
}
calloc函数
- 原型:void* calloc(unsigned int num,unsigned int size);
- 功能:为已经分配的内存重新分配空间并复制内容;
- 注意:num:对象个数,size:对象占据的内存字节数,相较于malloc函数,calloc函数会自动将内存初始化为0;
- 示例:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num;
int i;
int *ptr;
printf("元素个数为:");
scanf("%d", &num);
ptr = (int*)calloc(num, sizeof(int));
printf("输入 %d 个数字:\n", num);
for (i = 0; i < num; i++)
{
scanf("%d", &ptr[i]);
}
printf("输入的数字为:");
for (i = 0; i < num; i++) {
printf("%d ", ptr[i]);
}
printf("\n");
system("pause");
return 0;
}
创作不易,未经同意,转载请注明出处。
malloc,free,calloc,realloc函数的更多相关文章
- C语言中malloc()和calloc()c函数用法
C语言中malloc()和calloc()c函数用法 函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别. malloc()函数有一个参数,即要分配的内存空间的大小: ...
- C/C++ 动态存储分配 malloc calloc realloc函数的用法与区别
C++内存分配 https://blog.csdn.net/zhangxiao93/article/details/43966425
- C 语言中 malloc、calloc、realloc 和free 函数的使用方法
C标准函数库中,常见的堆上内存管理函数有malloc(), calloc(), recalloc(), free(). 之所以使用堆,是因为栈只能用来保存临时变量.局部变量和函数参数.在函数返回时,自 ...
- 动态开内存(malloc与calloc)
malloc与calloc 1.函数原型 #include<stdlib.h> void *malloc(unsigned int size); //申请size字节的内存 voi ...
- Linux C 堆内存管理函数malloc()、calloc()、realloc()、free()详解
C 编程中,经常需要操作的内存可分为下面几个类别: 堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等,它们获取的方式都是由编译器自动执行的 堆区(heap):一般 ...
- 【转】【C/C++】内存分配函数:malloc,calloc,realloc,_alloca
转自:http://www.cnblogs.com/particle/archive/2012/09/01/2667034.html#commentform malloc: 原型:extern voi ...
- C++malloc,calloc,realloc,free函数
在进行C/c++编程的时候,需要程序员对内存的了解比较清楚,经常需要操作的内存可分为下面几个类别: 1.堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等, ...
- C:malloc/calloc/realloc/alloca内存分配函数
原文地址:http://www.cnblogs.com/3me-linux/p/3962152.html calloc(), malloc(), realloc(), free(),alloca() ...
- malloc,calloc,realloc函数用法,原理及不同解析
https://blog.csdn.net/lixungogogo/article/details/50887028 一.malloc malloc在MSDN中原型为: void *malloc( s ...
随机推荐
- Gin-Go学习笔记二:Gin-Web框架
Gin-Web框架 1> 首先声明,这个是我自己搭建的纯Gin-Web框架,其中有借鉴学习别的想法和代码.已上传到GitHub上.地址为: https://github.com/weiy ...
- linux安装包制作
1. 常见安装包 打包或压缩文件tar,zip,gz等,一般解压后即可 管理工具的deb,rpm等.这类安装文件可以通过第三方的命令安装 (apt和yum) .bin类,其实就是把sh和zip打包为b ...
- CRM产品主数据在行业解决方案industry solution中的应用
AG3, choose this role: Create a new Acquisition Contracts: Here our product advances search will be ...
- kubernetes学习之二进制部署1.16
服务器规划和系统初始化 一.服务器规划 10.255.20.205 Master01 kube-apiserver.kube-controller-manager.kube-scheduler.ETC ...
- Java中的equals与==
package demo; public class Test { public static void main(String[] args) { String str1 = new String( ...
- Spark GraphX图计算核心算子实战【AggreagteMessage】
一.简介 参考博客:https://www.cnblogs.com/yszd/p/10186556.html 二.代码实现 package graphx import org.apache.log4j ...
- CDH5.13快速体验
相对于易用性很差Apache Hadoop,其他商业版Hadoop的性能易用性都有更好的表现,如Cloudera.Hortonworks.MapR以及国产的星环,下面使用CDH(Cloudera Di ...
- 将积累多年的java学习资料,pdf文档给大家分享一下,比如《大话设计模式》《算法》《Linux私房菜》等等
话不多说,资料目录如下,需要的拿走,下载的同时别忘了点下推荐. 需要的点下面链接,到小编网盘进行下载: 2-大话设计模式.pdf 链接:https://pan.baidu.com/s/1b05puNO ...
- 《linux就该这么学》课堂笔记15 vsftpd文件传输、Samba/NFS文件共享
1.为了能够在如此复杂多样的设备之间(Windows.Linux.UNIX.Mac等不同的操作系统)解决问题解决文件传输问题,文件传输协议(FTP)应运而生. FTP服务器是按照FTP协议在互联网上提 ...
- 借助模板类自动实现COM连接点接收器(Sink)更新
之前在借助模板类自动实现COM连接点接收器(Sink)中对原作者的代码进一步封装,弄清了连接点使用的原理,在看ATL代码的过程中,发现ATL本身就提供了AtlAdvise/AtlUnadvise这样的 ...