一、内存开辟方式
1.1 int a = 20;
1.2. char arr[10 = {10};
上述内存开辟方式有两个特点:
a.空间开辟的大小是固定的;
b.数组在声明的时候,必须指定数组的长度,数组空间一旦确定了,大小不能调整。
C语言引入了动态内存开辟,让程序员自己可以申请和释放空间,就比较灵活了。
二、malloc和free
2.1.malloc
2.1.1.函数原型:
void* malloc (size_t size);
2.1.2.作用:
分配一个大小为 size 字节的内存块,返回指向该块起始位置的指针。 新分配的内存块的内容未被初始化,保持不确定的值。 如果 size 为零,返回值取决于特定的库实现(可能是也可能不是空指针),但返回的指针不得被解引用。
2.1.3.注意事项
a.如果开辟成功,则指向开辟好空间的指针。
b.如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。
c.返回类型是void*,所以malloc函数并不知道开辟空间的类型,具体在使用的时候由使用者自己来决定。
d.如果参数size为0,malloc的行为是标准未定义的,取决于编译器。
三、free
c语言提供了另外一个函数free,专门是用来做动态内存的释放和回收的。
3.1.1函数原型
void free (void* ptr);
3.1.2.作用
调用该函数会释放此前通过 malloc、calloc 或 realloc 分配的内存块,使该内存可再次用于后续分配。 如果指针 ptr 并非指向由上述函数分配的内存块,将导致未定义行为。 如果 ptr 是空指针,函数不执行任何操作。
3.1.3.注意事项
a.如果参数ptr指向的空间不是动态开辟的,那free函数的行为是未定义的。
b.如果参数ptr是NULL指针,则函数什么都不做。
malloc函数和free函数都声明在stdlib.h头文件中




