1.使用动态内存的目标:
希望在程序执行的运行期间,可以动态的分配内存,由程序员手动的申请和释放内存; -> 堆区2. malloc函数
2.1函数的原型
#include <stdlib.h>void *malloc(size_t size);
2.2函数的介绍
函数的参数为要申请的内存大小,函数的返回值表示分配到内存的首地址,函数的功能就是申请一块指定大小的动态内存;如果申请失败,返回NULL,对于申请的内存不会进行初始化2.3 举例
i nt* p = malloc(sizeof(int)); //C编译能通过int* p = (int*)malloc(sizeof(int)); //C++检查严格
if(p == NULL){ // 申请空间失败}
int* q = (int*)malloc(5*sizeof(int));
char* str = (char*)malloc(sizeof(char));
struct Student* ps = (struct Student*)malloc(sizeof(struct Student));
3.calloc 函数
3.1 函数原型
void *calloc(size_t nmemb, size_t size);3.2 函数描述
函数用于申请nmemb个数据,每一个数据的大小是size的内存空间,申请失败则返回NULL,申请到的内存做清零处理4. realloc函数
4.1 函数的原型
void *realloc(void *ptr, size_t size);4.2 函数的描述
第一个参数是原来内存的首地址,第二个参数是新空间的大小,
返回值是新申请内存的首地址,如果申请失败,则返回NULL;
4.3 注意:
1)、如果新申请的内存空间比较大,多出来的内存空间不会被初始化,原来的数据不会改变2)、如果新申请的内存空间比较小,那么可能造成数据的丢失
3)、先判断当前的指针是否有足够 的连续内存,如果有则扩大ptr指向的内存地址,并且将ptr返回,
如果空间不够,先按照size指定的大小分配内存,将原来的数据拷贝到新内存区域中,释放原来的内存空间,同时返回新申请内存的首地址、
4.4 特殊性
1)、第一个参数为NULL,相当于malloc函数2)、第二个参数为0,相当于free函数
5. free函数
内存泄露:如果申请的内存不去使用却没有释放,这块内存别的程序也无法使用5.1函数的原型:
void free(void *ptr);5.2函数的描述
函数的功能用于释放ptr所指向的内存区域6.用途
1)、可以申请不定长的内存空间2)、可以不受作用域的限定