molloc函数C语⾔中常⽤的⼏个内存申请函数
C语⾔中常⽤的⼏个内存申请函数:
void* malloc(unsigned size);
void* realloc(void* ptr, unsigned newsize);
void* calloc(size_t numElements, size_t sizeOfElement);
以上函数都在头⽂件stdlib.h中定义,因此使⽤时必须导⼊该头⽂件。
malloc:
⼀般我们在平常写代码中⽤得最多的就是malloc函数了,其参数size是需要申请的内存长度,单位为字节,如果申请失败则返回NULL,否则返回申请到连续内存块的⾸地址,需要将返回的⾸地址指针强制转换成⽬标类型的指针。如:
char *p = (char*)malloc(10);
realloc:
realloc是给⼀个已经申请了内存的指针重新分配内存,即当⼀个指针指向的内存块不够或有多余时可以使⽤realloc为其重新分配合适⼤⼩的内存,相对于可以根据需要调整内存块的⼤⼩。参数ptr为原有的空间地址,newsize是重新申请的地址长度。
如:
char *p = (char *)malloc(10);
p = realloc(p, 20);
最终p指向的地址可能不变,也可能变了,但是p指向的内存块⼤⼩变⼤了,⽽且p原来内存块内的内容不变。
(重新分配内存后p指向的地址可能会变,变不变是根据实际情况⽽定的,如果重新分配的内存⽐原来的⼤,⽽且在内存中原来内存块紧跟着的后⾯有⾜够的空闲空间可供分配,则p的⾸地址不变,如果内存中原来内存块紧跟着的后⾯没有⾜够的空间可供分配,则系统会从其他地⽅寻⼀段⾜够⼤的空闲空间来分配给p,这种情况下p指向的地址就会改变了,原因就是因为不管是malloc还是realloc,其申请的内存块都必须是连续的)。
calloc:
calloc跟malloc差不多,但calloc⽐malloc多做了⼀步操作,就是将申请到的内存块全部初始化为0。参数numElements表⽰元素个
数,sizeOfElement表⽰每个元素的⼤⼩,即calloc申请的内存块⼤⼩是numElements * size_t sizeOfElement 字节。
以上函数都是从堆上申请内存,所以需要程序猿⾃⼰释放内存,释放内存:
free(void*ptr);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论