1.为什么存在动态内存管理?
我们已经掌握的内存开辟方式有:
int val = 20;//在栈空间上开辟四个字节
char arr[10] = {0}; //在栈空间上开辟10个字节的连续空间
但是这些开辟空间的方式开辟的空间大小是固定的,数组在声明的时候,也是必须指定大小。他们所需要的内存在编译时分配
而有些时候我们需要的空间大小在程序运行的时候才能知道,所以就要有一种动态内存分配的方式
动态开辟的内存都在堆上
2.如何动态的分配内存?
c语言提供了一个动态内存开辟的方式:
- malloc:向内存动态的申请一块空间
- 函数原型: void * malloc (size_t size);
- 函数说明:
1)这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针
2)如果开辟成功,则返回一个指向开辟好空间的指针
3)如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查
4)返回值类型是void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候由使用者自己来决定。
5)如果参数size为0,malloc的行为是标准为定义的,取决于编译器