当前位置:网站首页>【无标题】
【无标题】
2022-07-22 20:51:00 【圆形的海】
动态内存管理
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、动态内存函数
malloc
void* malloc (size_t size);

int* ptr=NULL;
ptr=(int*)malloc(4*sizof(int))//开辟4个int类型大小的空间
if(ptr=NULL)
{
}
free(ptr);
ptr=NULL;
calloc
void* calloc (size_t num, size_t size);//开劈空间并且将开辟的空间全都初始化为0;

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

int* ptr=NULL;
ptr=(int*)malloc(4*sizeof(int))//开辟4个int类型大小的空间
if(ptr=NULL)
{
}
int* p=NULL;
p=(int*)realloc(ptr,8*sizeof(int));
if(p=NULL)
{
}
ptr = p;
p=NULL;
free(ptr);
ptr=NULL;
ptr为原来指针,8*sizeof 是增加开辟空间后的总内存
二、动态内存分配常见错误
1.忘记判断分配是否成功
void test()
{
int *p = (int *)malloc(INT_MAX/4);
*p = 20;//如果p的值是NULL,就会有问题
free(p);
}
2.动态开辟空间越界访问
void test()
{
int i = 0;
int *p = (int *)malloc(10*sizeof(int));
if(NULL == p)
{
exit(EXIT_FAILURE);
}
for(i=0; i<=10; i++)
{
*(p+i) = i;//当i是10的时候越界访问
}
free(p);
}
3.对非动态开辟的空间使用free分配
void test()
{
int a = 10;
int *p = &a;
free(p);//不是动态分配的地址
}
4.free没有完全释放空间
void test()
{
int *p = (int *)malloc(100);
p++;//p++以后指针已经不是指在开辟空间的头部
free(p);//释放不完全
}
5.多次释放同一片地址
void test()
{
int *p = (int *)malloc(100);
free(p);
free(p);//重复释放
}
6.内存泄漏
int* ptr=NULL;
ptr=(int*)malloc(4*sizeof(int))//开辟4个int类型大小的空间
if(ptr=NULL)
{
}
int* p=NULL;
p=(int*)realloc(ptr,8*sizeof(int));
if(p=NULL)
{
}
ptr = p;
p=NULL;
//free(ptr);
//ptr=NULL;缺少手动释放内存空间的动作
三、动态开辟的地址存放在堆区
1. 栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结
束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是
分配的内存容量有限。 栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返
回地址等。
2. 堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。分
配方式类似于链表。
3. 数据段(静态区)(static)存放全局变量、静态数据。程序结束后由系统释放。
4. 代码段:存放函数体(类成员函数和全局函数)的二进制代码。
总结
1.开辟动态内存使用到三个函数
malloc()calloc()realloc()
一个释放空间的函数 free()
2.在日常开辟动态空间时务必规避常见错误,加强代码健壮性
边栏推荐
- NFT Insider #67:巴塞罗那足球俱乐部推出首个NFT作品,迪拜推出国家元宇宙战略
- Application of the latest version of Ontrack easyrecovery computer data recovery software
- 第一篇sourcetree安装
- 7、学习MySQL 选择数据库
- Ambire 钱包开启 Twitter Spaces 系列
- Uno/esp8266 for tca9548a module dual channel drive 2 sh1106 1.3 "displays
- 一年130+新服务和功能,这个存储“全家桶”又壮大了
- 聪明人的游戏提高篇:第三章第三课例题:素数的秘密(prime)
- Wechat hotel reservation applet graduation project (6) opening defense ppt
- Stm32cubeide link script explanation
猜你喜欢

Educational Codeforces Round 132 A - D

ETL工具(数据同步)

7、学习MySQL 选择数据库

Nftscan and ATEM network have reached strategic cooperation in the field of NFT data

Draw a wave ball with the curve of flutter and Bessel

能量原理与变分法笔记11:形函数(一种降维思想)

企业生产线改善毕业论文【Flexsim仿真实例】

Go语言系列-协程-GMP简介-附字节跳动内推

Research on security situation awareness method of Internet of things based on evidence theory

C language program environment
随机推荐
excel 将图片的链接URL 显示为图片 转
小程序毕设作品之微信校园二手书交易小程序毕业设计成品(5)任务书
智能商务的数据分析平台设计与实现
[untitled] share an API Gateway project developed based on ABP vNext
【每日一题】757. 设置交集大小至少为2
Wechat campus second-hand book trading applet graduation design finished product (4) opening report
GNU pseudo instruction definition function
GNU LD脚本命令语言(二)
Stm32cubeide link script explanation
Flutter内存泄漏检测
SDN application layer DDoS attack defense mechanism based on API call management
能量原理与变分法笔记11:形函数(一种降维思想)
Understanding service governance in distributed development
GNU LD script command language (II)
对比学习下的跨模态语义对齐是最优的吗?---自适应稀疏化注意力对齐机制 IEEE Trans. MultiMedia
One dimensional array and object array in [c # array]-c #
Wechat hotel reservation applet graduation project (5) assignment
Go语言系列-协程-GMP简介-附字节跳动内推
Wechat hotel reservation applet graduation project (6) opening defense ppt
iQOO 10系列来袭 OriginOS原系统强化手机体验