---xiaoxiaopig 2009/11/16
“动态”(Dynamic)内存分配的意思是:程序运行时系统根据需要分配存储空间存储数据。注意用过后要及时释放所分配的空间,否则剩余内存空间就会越来越小,影响系统运行。
C语言中常用malloc()和calloc()函数来动态地取得内存空间。
一、malloc()和free()函数
malloc()和free()函数是C语言中最常用的动态内存分配与释放函数。
malloc()的格式为:指针=malloc(空间大小);
例如:ptr=malloc(100);这个指令要求计算机分配连续的100Bytes空间。malloc()函数返回该空间的首地址,且存入ptr内。
free()的格式为:free(指针);//把指针所指区域释放掉
例子:char *p;
p=(char*)malloc(8);//开辟8个字节的存储空间,并把地址赋给指针p,通过指针p对该空间进行存取操作。
*p='L'; //存储字符,所分配空间的第0字节存储L
*(p+1)='o';//分配空间的第一字节存储字符'o'.
*(p+2)='v';
*(p+3)='e';
*(p+4)='\0';
puts(p);//输出字符串
free(p);//释放空间
注意:*(p+n)等价于p[n],(p+n)是地址,而*(p+n)就是取地址(p+n)的内容。
如上面程序中的*(p+1)='A';可写成p[1]='A';
malloc()函数的参数可以是常数、变量或表达式等。除了存放字符串外,malloc()也可取得空间来存储整数等数据。例如存储整数分配空间如下:
int *ptr;
ptr=(int *)malloc(sizeof(int)*4);
malloc()开辟空间存储4个整数数据,由于malloc()总传回第0字节的地址,且返回值必定是char*类型,所以要通过(int *)来强制转换为指向整型后存入指向整型的指针ptr.
当用malloc()函数分配空间时,若计算机无法提供足够的空间分配则会返回NULL指针。所以,若返回的指针为NULL,就表示可分配的剩余空间已不足。
文章评论(0条评论)
登录后参与讨论