原创 C语言中动态内存分配

2009-11-16 14:12 4404 3 3 分类: 软件与OS

                                                              ---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,就表示可分配的剩余空间已不足。


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条