资料出处:http://book.51cto.com/art/201203/326322.htm
第1章 动态内存管理函数:alloc.h
动态内存管理函数在程序执行过程中为程序中的数据分配内存,这些函数都通过指针来指明内存地址。
最常用的动态内存管理函数是stdlib中的malloc()、calloc()和free(),这组函数在同一数据段中分配内存,当程序中动态分配的内存很多,以至于跨跃数据段分配时,用到本章中的函数,其实用性稍差。
本章程序不能用VC编译,所有程序均在TC 2.0中编译运行。
1.1 brk()--重置数据段存储空间函数
brk()函数
brk()函数用于通过重新设置数据段结束位置,改变数据段存储空间大小。
语法
- int brk(void *endds);
brk()函数的语法参数说明如下:
参数endds为重新设置的数据段结束地址。
brk()函数的返回值:函数成功执行时返回值为0,不成功则为-1。
示例
本示例演示读取文本文件中的所有整数。使用malloc()分配MAX个整数空间,用于保存数据,执行中如果MAX个空间用完而文件中还有未读完的数据,则用brk()函数重新设置数据段存储空间。
程序执行前先在D:\下用记事本建立文件aa.txt,输入1 2 3 4 5 6 7 8(每个数之间用一个空格分开)。其具体代码如下:
- #include "stdio.h"
- #include "alloc.h"
- #define MAX 500 /*预定义空间,也是每次增加的空间容量*/
- main()
- {
- int *p,n=0,max=MAX; /*max实际已分配的空间*/
- FILE *fp;
- clrscr(); /*清屏*/
- fp=fopen("d:\\aa.txt","r"); /*打开文件*/
- p=(int*)malloc(MAX*sizeof(int)); /*预先分配MAX个整数空间*/
- while(!feof(fp)) /*只要没到文件尾就从文件输入*/
- {
- if(n==max) /*空间用完时,增加数据段大小*/
- {
- maxmax=max+MAX;
- brk(p+max); /*将数据段结束位置定在max+MAX,即增加MAX*/
- }
- fscanf(fp,"%d",&p[n]); /*从文件读一个整数*/
- printf("%d ",p[n]); /*显示这个数*/
- n++; /*实际读出数据个数*/
- }
- fclose(fp); /*关闭文件*/
- free(p); /*释放内存*/
- }
运行结果如图1.1所示。
![]() |
图1.1 brk()函数的 执行结果(文件中只有8个数) |