exit和_exit 进程终止有5种方法: 1正常终止 (1)从main函数返回 (2)调用exit (3)调用_exit 2异常终止 (1)调用abort (2)由一个信号来终止 exi

四个函数的声明分别是:
        void* realloc(void* ptr, unsigned newsize);
        void* malloc(unsigned size);
        void* calloc(size_t nelem, size_t elsize);
        free(q);                       //其中q为已经分配的块;
四个函数都被包含在stdlib.h函数库内。
C语言的标准内存分配函数:malloc,calloc,realloc等:
malloc与calloc的区别为1块与n块以及是否初始化的区别:
malloc调用形式为(类型*)malloc(size):在内存的动态存储区中分配一块长度为"size"字节的连续区域,返回该区域的首地址。如果内存没有分配好,则返回值是NULL。对于分配到的内存块并没有进行初始化操作。这块内存可能包含任何随机的垃圾,你可以马上用有效数据或者至少是用零来初始化这块内存。要用0初始化,可以用void *memset(void *s, int c, size_t n); 
malloc用于申请一段新的地址,参数size为需要内存空间的长度,如: 
char* p; 
p=(char*)malloc(20); //这里有一个显示类型转化,由void*转化为char*
calloc调用形式为(类型*)calloc(n,size):在内存的动态存储区中分配n块长度为"size"字节的连续区域,返回首地址。对于分配到的内存块初始化为0,无需要使用memset初始化。有经验的程序员更喜欢使用calloc(),因为这样的话新分配内存的内容就不会有什么问题,调用calloc()肯定会清0。 
calloc与malloc相似,参数sizeOfElement为申请地址的单位元素长度,numElements为元素个数,如: 
char* p; 
p=(char*)calloc(20,sizeof(char)); 
realloc 不能保证重新分配后的内存空间和原来的内存空间指在同一内存地址, 它返回的指针很可能指向一个新的地址。 
所以,在代码中,必须把realloc返回的值,重新赋给 p 如: 
p = (char *) realloc (p, old_size + new_size); 
甚至,你可以传一个空指针(0)给 realloc ,则此时realloc 作用完全相当于malloc。 
int* p = (char *) realloc (0,old_size + new_size); //全新分配一个内存空间,作用完全等同于以下这行: int* p = (char *) malloc(old_size + new_size); 
calloc(len, size)与malloc相似,参数len为申请地址的单位元素长度,size为元素个数,如: 
char* p; 
p=(char*)calloc(sizeof(char),1000);
对realloc的详细语法说明:
void *realloc( void *memblock, size_t size ); 
一、如果memblock = 0, size != 0,表示为空指针分配空间,同malloc(memblock, size) 
二、如果memblock != 0, size = 0,表示将已分配的空间释放,同free(memblock) 
三、如果memblock != 0, size != 0,表示将已分配的空间重新分配, 
1。如果size < memblock已分配内存大小,则将memblock的后部分切除,返回指针和memblock相等。 
2。如果size > memblock已分配内存大小, 
a)并且memblock大小和其后的自由内存总和大于等于size,则分配size大小的内存,返回指针和memblock相等。 
b)如果memblock大小和其后的自由内存总和小于size,则在其他地方分配size大小的内存,返回指针和memblock不相等。如果其他地方也没有足够空间分配内存,则返回指针NULL。 
free(p)操作的结果是:指针p指向的地址没变,但地址处的数据此时已经无定义了。即,指针还在,但是数据已经被释放了。
转载原创文章请注明:文章转载自:王者永乐 http://www.wzyl.tk
本文标题:C语言中malloc,calloc,realloc,free的语法与作用
本文地址:http://www.wzyl.tk/?p=311 
本文来源于王者永乐 http://www.wzyl.tk , 原文地址: http://www.wzyl.tk/?p=311 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值