LINUX编程-实验五 内存管理实验
更新时间:2024-05-12 04:22:01 阅读量: 综合文库 文档下载
实验五 内存管理实验
1. 目的要求
(1) 学习使用内存管理库函数。 (2) 学习分析、改正内存错误。
2. 实验内容
(1) 内存库函数实验 ?
malloc函数
原型:extern void *malloc(unsigned int num_bytes); 头文件:#include
功能:分配长度为num_bytes字节的内存块。
说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。 举例:运行程序清单5-1,写明运行结果: _
?
______________________________________________________________________________________________________________________________________________________________ calloc函数
原型:extern void *calloc(int num_elems, int elem_size); 头文件:#include
功能:为具有num_elems个长度为elem_size元素的数组分配内存。
说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。 举例:运行程序清单5-2,写明运行结果:
________
______________________________________________________________________________________________________________________________________?
_________________ realloc函数
原型:extern void *realloc(void *mem_address, unsigned int newsize); 头文件:#include
功能:改变mem_address所指内存区域的大小为newsize长度。
说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。
举例:运行程序清单5-3,写明运行结果: ___
____________________________________________________________________________________________________________________________________________________________ (2) 内存错误分析实验
分析1:指出程序清单5-4的内存错误原因。
错误原因:___ ApplyForMem(char *p,int num)是不能传递动态内存的,
这样main函数当中Str始终都是
NULL____________________________________________________________________________________________________________________________________________________________
分析2:指出程序清单5-5的内存错误原因。
错误原因:____ (const char *)没有具体指明内存地址,这个写法表示从地址0处取一个字符,而地址0是没有东西的
________________________________________________________________________________________________________________________________________
___________________
分析3:通过比较程序清单5-6、5-7输出结果,分析程序5-3内存错误原因 程序5-6运行结果
_______________________________________________________________________________________________________________________________________________________________ 程序5-7运行结果 ___
???____________________________________________________________________________________________________________________________________________________________ 错误原因
__程序5-6释放内存的顺序和分配内存的顺序不对应。
_____________________________________________________________________________________________________________________________________________________________ 经验总结
______堆分配内存后,释放内存的顺序应该和分配内存的逆序,这样才能保证释放内存的顺序的正确性。
________________________________________________________________________________________________________________________________________________________
3. 主要仪器设备及软件
(1) 硬件:计算机、网络
(2) 软件:VMWare workstation、RedHat 9.0 4. 附录:程序清单if()
(1) 5-1
#include
char *p;
clrscr(); // clear screen p=(char *)malloc(100); if(p)
printf(\ else
printf(\ free(p);
return 0;
}
(2) 5-2
#include
char *p;
clrscr(); // clear screen p=(char *)calloc(100,sizeof(char)); if(p)
printf(\ else
printf(\ free(p); return 0; }
(3) 5-3
#include
main() {
char *p;
clrscr(); // clear screen p=(char *)malloc(100); if(p)
printf(\ else
printf(\ p=(char *)realloc(p,256); if(p)
printf(\ else
printf(\ free(p); return 0; }
(4) 5-4
……
Void ApplyForMem(char *p,int num)
{
p=(char*)malloc(sizeof(char)*num); return; }
int main() {
char *str=NULL; ………….
ApplyForMem(str,300); free(str); infile.close(); return 0; }
(5) 5-5 #include
char z = *(const char *)0; exit(EXIT_SUCCESS); }
(6) 5-6 #include “stdlib.h”
#define HEAP_BLOCK_SIZE 32 int main() {
// 分配申明 heap 内存块 1
char *pbuf1 = (char *) malloc(HEAP_BLOCK_SIZE);
printf(\*pbuf1 = '1';
//分配申明 heap 内存块 2
char *pbuf2 = (char *) malloc(HEAP_BLOCK_SIZE);
printf(\*pbuf2 = '2';
//分配申明 heap 内存块 3
char *pbuf3 = (char *) malloc(HEAP_BLOCK_SIZE);
printf(\*pbuf3 = '3';
// 释放 heap 内存块 1
printf(\free(pbuf1);
//释放 heap 内存块 2
printf(\free(pbuf2);
//释放heap内存块 3
printf(\free(pbuf3);
//分配申明 heap 内存块 4
char *pbuf4 = (char *) malloc( HEAP_BLOCK_SIZE);
printf(\*pbuf4 = '4';
//分配申明 heap 内存块 5
char *pbuf5 = (char *) malloc( HEAP_BLOCK_SIZE);
printf(\*pbuf5 = '5';
//分配申明 heap 内存块 6
char *pbuf6 = (char *) malloc( HEAP_BLOCK_SIZE);
printf(\*pbuf6= '6'; for(;;) { }
Sleep(1000);
return 0; }
(7) 5-7
#include “stdlib.h”
#define HEAP_BLOCK_SIZE 32 int main() {
// 分配申明 heap 内存块 1
char *pbuf1 = (char *) malloc(HEAP_BLOCK_SIZE);
printf(\*pbuf1 = '1';
//分配申明 heap 内存块 2
char *pbuf2 = (char *) malloc(HEAP_BLOCK_SIZE);
printf(\*pbuf2 = '2';
//分配申明 heap 内存块 3
char *pbuf3 = (char *) malloc(HEAP_BLOCK_SIZE);
printf(\*pbuf3 = '3';
// 释放 heap 内存块 3
printf(\free(pbuf3);
//释放 heap 内存块 2
printf(\free(pbuf2);
//释放heap内存块 1
printf(\free(pbuf1);
//分配申明 heap 内存块 4
char *pbuf4 = (char *) malloc( HEAP_BLOCK_SIZE);
printf(\*pbuf4 = '4';
//分配申明 heap 内存块 5
char *pbuf5 = (char *) malloc( HEAP_BLOCK_SIZE);
printf(\*pbuf5 = '5';
//分配申明 heap 内存块 6
char *pbuf6 = (char *) malloc( HEAP_BLOCK_SIZE);
printf(\*pbuf6= '6'; for(;;) { } return 0; }
Sleep(1000);
正在阅读:
LINUX编程-实验五 内存管理实验05-12
货物积载与系固评估训练练习题 - 图文11-16
党员谈心谈话记录-党内谈心谈话记录07-31
小学生信息素养培养探微04-03
2018新版北师大版六年级下册数学期末试卷5套(最新审定)09-23
微博十大经典营销案例分享05-14
一般固体废弃物处置委托协议(示范协议)05-18
MS-EEPO有效教育知识09-07
资料培训内容表格形式 - 图文01-06
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 实验
- 内存
- 编程
- LINUX
- 管理
- 教新手用flash制作个性日志(一)
- 新课标“空间观念”学习体会
- 电磁感应基础知识专题
- 2015年最新国家开放大学形考考试答案大全1-5
- 2015-2016学年陕西省西安七十中八年级上12月月考数学试卷
- 我的砌体结构最终方案
- 数学二年级下册租船问题的练习题
- dojo类机制简介
- windows基本操作
- 电除尘维护手册
- 小值电感器的绕制概要
- 人教版小学四年级语文下册23、古诗词三首教案
- 年产500万米高压胶管建设项目可行性研究报告,2013年
- 上海外国语大学2002年研究生入学考试宏观经济学试题
- 国有企业科协及企业科协联合会组织建设工作调研报告2017,11
- 宝宝教育问题
- 永华公寓开盘前营销推广执行方案
- 中国人民大学在职研究生艺术专业 艺术哲学题库+答案 (自己整理版
- 2013.10月园林设计方案文本及施工图资料汇总
- 农村经济管理试题