1、malloc()
使用方法:
void *malloc(size_t size);
void free(void *ptr);
malloc()函数有一个size_t的参数size,表示需要分配size字节大小的内存,返回值是一个void类型的指向内存分配的首地址,如果分配失败,返回NULL。void*表示无类型指针,在使用的时候可以转换为任何类型的指针。
注意:malloc()函数返回的是分配内存的首地址,由于指针的值是可以改变的,所以在使用时不要改变这个指针的值,比如ptr++,这样的操作会使得free失败。
而且malloc()是与free()配合使用的,C++中是new与delete配合使用的,切记不可混淆。
2、calloc()
calloc()用于向应用程序分配内存,定义如下:
void *calloc(size_t nmemb, size_t size);
参数nmemb表示要分配的元素个数,参数size表示每个元素的大小,分配的内存空间大小为
nmemb*size;返回void类型的指针,指向内存的首地址。
malloc()函数与calloc()函数最大的区别在于,malloc()函数分配内存空间后不能初始化内存空间,而calloc()函数在分配内存空间后可以初始化新分配的内存。malloc()函数分配的空间可能是原来未使用过,内存值为0,;如果malloc()函数分配的空间曾经被使用过,则内存值不全为0。所以为了保证内存数据的有效性,需要手动将内存区域重置为0。
用法一:
int *p_mem=(int*)calloc(1024, sizeof(int));
//分配1024*sizeof(int)字节大小的内存,并清空为0
用法二:
int *p_mem=(int*)malloc(1024*sizeof(int));
//分配1024*sizeof(int)字节大小的内存
memset(p_mem,0,1024*sizeof(int));
//将分配的空间手动置0
用法一中使用calloc()函数初始化内存会根据分配内存空间每一位都初始化为0,如果分配的内存是指针类型,则初始化为空指针NULL。而用法二使用memset()函数填充的值全为0,但不能保证生成有用的空指针或浮点0值。
3、realloc()
realloc()函数用于重新分配正在使用的一块内存大小,定义如下:
void *realloc(void *ptr, size_t size);
realloc()函数可以调整ptr所指向的内存空间的大小。既可以扩大内存,也可以缩小。需要注意的是,如果缩小空间,则被缩小空间的数据将会丢失。
int *p_mem=(int*)malloc(1024); //分配1024字节大小内存
p_mem=(int*)realloc(2048); //重新分配2048字节大小的内存
注意:
realloc()函数调整后的内存空间起始地址有可能与原来不同。