网站导航条背景图片镇江优化九一
这三个函数都是在堆区分配内存的函数,头文件都是:
#include<stdlib.h>
 
下面分别介绍这三个函数:
malloc:
函数原型:
void *malloc(unsigned int num_bytes);
 
功能:堆区开辟一段内存空间
 num_nytes:要开辟的内存字节数
 返回值:新开辟内存的首地址
 初始值:随机
 常规用法:
int* a = malloc(sizeof(int)*10);
 
calloc:
函数原型:
void *calloc(size_t n, size_t size);
 
功能:堆区开辟一段内存空间
 n:n个数
 size:每个数的字节数
 返回值:新开辟内存的首地址
 初始值:0
 常规用法:
int b = calloc(10, sizeof(int));
 
realloc:
函数原型:
void *realloc(void *mem_address, unsigned int newsize);
 
功能:修改以前在堆区分配过的内存大小
 mem_address:以前分配过内存地址
 newsize:修改后的字节数
 返回值:修改内存大小后的地址
 常规用法:
int* c = malloc(10*sizeof(int));  
c = realloc(c, 20);  //新内存大小为20
 
注意:
 newsize如果小于以前的size,那么就会缩减,如果继续访问不在缩减后的地址,会报错。
 newsize如果大于以前的size,分两种情况:原地址后面有足够空间分配newsize个地址,返回原地址;原地址后面不够分配,那么会重新找一块内存,把原来的值复制过来,返回新地址。
