LINUX编程-实验五 内存管理实验

2019-05-17 11:08

实验五 内存管理实验

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 #include main() {

char *p;

clrscr(); // clear screen p=(char *)malloc(100); if(p)

printf(\ else

printf(\ free(p);

return 0;

}

(2) 5-2

#include #include main() {

char *p;

clrscr(); // clear screen p=(char *)calloc(100,sizeof(char)); if(p)

printf(\ else

printf(\ free(p); return 0; }

(3) 5-3

#include #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 #include #include int main() {

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);


LINUX编程-实验五 内存管理实验.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:一至六年级数学知识竞赛通报 - 5 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: