头文件 #include <stdlib.h>
1、malloc函数 void *malloc(size_t size)
分配所需的内存空间,并返回一个指向它的指针。分配一块内存(连续的)供使用,并返回首地址的指针。
2、calloc函数 void *calloc(size_t nitems, size_t size)
nitems 要被分配的元素的个数;size 要被分配的元素的大小。
分配所需的内存空间,并返回一个指向它的指针。
注意:malloc 和 calloc 之间的不同点是,malloc 不会设置内存为零,而 calloc 会设置分配的内存为零。
3、realloc函数 void *realloc(void *ptr, size_t size)
尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。
ptr -- 指针指向一个要重新分配内存的内存块,该内存块之前是通过调用 malloc、calloc 或realloc 进行分配内存的。如果为空指针,则会分配一个新的内存块,且函数返回一个指向它的指针。(必须是之前通过malloc或calloc或realloc函数分配的内存,即堆区内存)
size -- 内存块的新的大小,以字节为单位。如果大小为 0,且 ptr 指向一个已存在的内存块,则 ptr 所指向的内存块会被释放,并返回一个空指针。(可以用来释放内存)
注:不会清除之前数组中已有的数据。且若缩小内存,之前的数据也不会丢掉,因为realloc函数不重新分配内存,只是把原内存块扩大到参数指定大小,返回的还是原内存地址,除非重新分配内存为0,即free内存。(重要!!!)
4、free函数 void free(void *ptr)
释放之前调用 calloc、malloc 或 realloc 所分配的内存空间。
用完内存后释放内存是个好习惯哦~
----------------------------------------------------------------------------------------------------------------------------
下面是今天我收获的一个小教训(使用函数易错案例)
头文件#include <string.h>
void * memset(void *s, int c, unsigned long n);
将指针变量 s 所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int 型。
memset 函数的第三个参数 n 的值一般用 sizeof() 获取,这样比较专业。注意,如果是对指针变量所指向的内存单元进行清零初始化,那么一定要先对这个指针变量进行初始化,即一定要先让它指向某个有效的地址。而且用memset给指针变量如p所指向的内存单元进行初始化时,n 千万别写成 sizeof(p),这是新手经常会犯的错误。因为 p 是指针变量,不管 p 指向什么类型的变量,sizeof(p) 的值都是 4。