LINUX编程-实验五 内存管理实验
更新时间:2024-05-13 23:33: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-13
海关总署关于印发《现代海关制度第二步发展战略规划(2006年修订)》的通知11-23
腰背痛患者康复功能评估方法学的研究和进展08-09
c8051f单片机在x光机数据采集系统中的应用 - 图文10-27
2018-2019-上半年政工科工作总结(精选多篇)-实用word文档(11页)01-29
有关中秋节的日记5篇10-29
供应商索赔流程_V1.011-21
司法服务网68例意见书08-13
分立元件OCL功率放大电路原理分析04-01
旅游者消费心理03-03
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 实验
- 内存
- 编程
- LINUX
- 管理
- 教新手用flash制作个性日志(一)
- 基于ADS的混合环的设计
- 2014江苏事业单位面试备考:考前实战演练及解析十三
- 人教版小学四年级语文下册23、古诗词三首教案
- 哈佛大学首席天体物理学家惊人结论:没有外星人
- 企业文化心得体会
- 2015年最新国家开放大学形考考试答案大全1-5
- 《建筑招投标概论》网络作业题库(答案)
- 2018年全国各地中考物理试题电学学计算题汇编(最全)
- 2013.10月园林设计方案文本及施工图资料汇总
- 基础会计第三章习题
- 钢筋常用的分类 型号 弯曲
- 苏教版小学语文第六册第一单元检测试题
- 工程监理企业承包业务范围
- 国有企业科协及企业科协联合会组织建设工作调研报告2017,11
- 福建省《水泥工业大气污染物排放标准》编制说明
- 海归找工作难简历中教育背景的写法
- 年产500万米高压胶管建设项目可行性研究报告,2013年
- 1-薪酬体系管理制度
- 超星全球变化与地球系统答案