首页 > 系统相关 >C动态内存分配和管理函数malloc,calloc,free与realloc

C动态内存分配和管理函数malloc,calloc,free与realloc

时间:2024-08-23 23:22:40浏览次数:12  
标签:malloc int realloc void free 内存 分配 size

目录

 介绍

1.void* malloc(size_t size);

2.void* calloc(size_t num, size_t size);

3.void* realloc(void* ptr, size_t size);

4.void free(void* ptr);

5.代码演示


 介绍

在 C 语言中,malloccallocrealloc 和 free 是用于动态内存分配和管理的标准库函数。它们定义在 <stdlib.h> 头文件中。

1.void* malloc(size_t size);

size: 要分配的字节数。

malloc 函数用于分配指定字节数的内存块,并返回指向该内存块的指针。分配的内存内容是未初始化的。回一个 void* 指针,指向分配的内存块。如果分配失败,返回 NULL

2.void* calloc(size_t num, size_t size);

num: 要分配的对象数量,size: 每个对象的字节数。

calloc 函数用于分配一块内存,用于存储指定数量的对象,每个对象的大小为指定字节数。分配的内存块会被初始化为零。返回一个 void* 指针,指向分配的内存块。如果分配失败,返回 NULL。

3.void* realloc(void* ptr, size_t size);

ptr: 指向已分配内存块的指针,size: 新的内存块大小(以字节为单位)

realloc 函数用于重新调整已分配内存块的大小。如果需要增加或减少内存块的大小,realloc 可以用来改变内存块的大小,保留原有数据(如果有的话)。返回一个 void* 指针,指向新分配的内存块。如果分配失败,返回 NULL,并且原内存块未被修改。

4.void free(void* ptr);

ptr: 指向要释放的内存块的指针。

free 函数用于释放先前由 malloccalloc 或 realloc 分配的内存块。释放内存块后,该内存块变为不可用,且无法再次访问无返回值。

5.代码演示

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int* ssr=(int *)malloc(40);//分配40个字节的空间 
	int* sr=(int *)calloc(5,sizeof(int));//分配5个int(4个字节)所占空间,并都赋值为0 
	int* r=(int*)realloc(ssr,30);//修改ssr所指向的空间并修改大小为30个字节,并返回新的内存地址给r
	ssr=r; 
	free(ssr);//释放空间 
	free(sr);
	return 0;
}

标签:malloc,int,realloc,void,free,内存,分配,size
From: https://blog.csdn.net/song0789/article/details/141196529

相关文章

  • 高并发内存池-TCMalloc
    目录项目介绍什么是内存池定长内存池高并发内存池基数树结构申请和释放接口多线程并发环境测试全文件扩展和不足参考资料1.项目介绍1.这个项目做的是什么?当前项目是实现一个高并发的内存池,它的原型是google的一个开源项目tcmalloc,全称Thread-CachingMalloc,即线程缓......
  • freeswitch 32秒自动挂断问题
    freeswitch32秒自动挂断问题说明:首次发表日期:2024-08-23参考:https://serverfault.com/questions/1008661/freeswitch-drops-calls-after-32-secondshttps://blog.csdn.net/qq_32110203/article/details/141126033https://stackoverflow.com/questions/73708045/freeswitc......
  • .net使用Freesql连接瀚高数据库
    默认情况下Freesql可以使用PostgreSQL的连接方式连接,如果是md5加密的varisdatabase=MyRedis.GetStringKey("DataBaseType");varsqlConnStr="Server=192.168.1.111;Port=5866;UserId=root;Password=123456;Database=databasename;searchpath=moshi";FreeSql.D......
  • 队列操作(深入理解FreeRTOS队列之队列实战)
    文章目录一、队列的操作二、学习总结在FreeRTOS中,队列的本质是环形缓冲区。一、队列的操作1、创建队列2、写队列3、读队列详细可看此篇博客:FreeRTOS——队列(基于百问网DshanMCU-F103实现挡球板游戏改造)-CSDN博客基于链表解析队列的使用:代码示例:#include"......
  • 【FreeRTOS】任务调度与任务状态的介绍(二)
    一、任务调度调度器就是使用相关的调度算法来决定当前需要执行的哪个任务FreeRTOS一共支持三种任务调度方式:抢占式调度主要是针对优先级不同的任务,每个任务都有一个优先级,优先级高的任务可以抢占优先级低的任务。时间片调度主要针对优先级相同的任务,当多个任务的优先......
  • Free Online 1080P Youtube Video Downloader All In One
    FreeOnline1080PYoutubeVideoDownloaderAllInOne免费在线1080PYoutube视频下载器https://yt5s.io/en93https://yt5s.biz/enxj100/demosIELTS雅思https://www.youtube.com/watch?v=GSnWFA3qnAg(......
  • FreeRTOS--列表和列表项
    目录1列表(Lists)2列表项(ListItems)3使用列表和列表项4使用实例在FreeRTOS中,列表和列表项是非常重要的数据结构,用于实现任务管理和调度。以下是关于这两个概念的详细介绍:1列表(Lists)列表是FreeRTOS中的一种数据结构,用于存储任务状态的信息。主要有两种类型的......
  • FreeScheduler 在asp.net core 中使用依赖注入的方式进行注入使用
    1.创建SchedulerTask.cs类,代码如下publicclassSchedulerTask{privatereadonlyILogger<SchedulerTask>_logger;privatereadonlyIServiceScopeFactory_serviceScopeFactory;publicSchedulerTask(ILogger<SchedulerTask>logger,IServiceSc......
  • FreeRTOS 快速入门(五)之信号量
    目录一、信号量的特性1、信号量跟队列的对比2、两种信号量的对比二、信号量1、二值信号量1.1二值信号量用于同步1.2二值信号量用于互斥2、计数信号量三、信号量函数1、创建2、删除3、give/take一、信号量的特性信号量(Semaphore)是一种实现任务间通信的机制,可以......
  • centos7安装FreeRadius3及WEB管理界面DaloRadius
    一、基础环境安装1.安装基础环境yum-yinstallgccgcc-c++autoconflibjpeglibjpeg-devellibpnglibpng-develfreetypefreetype-devellibxml2libxml2-develzlibzlib-develglibcglibc-develglib2glib2-develbzip2bzip2-develncursesncurses-develcurlcurl-......