动态内存分配
我们在开辟内存的时候就是
int a =3;
这样
但是这样开的空间大小是固定的,且大小不能调整
但是如果我们用动态内存开辟的话,就可以自己申请和释放空间、
malloc
是C语言提供的一个开辟动态空间的函数
void* malloc (size_t size);//size是要开辟的内存,单位是是字节
开辟成功的话会返回一个开辟好空间的指针,如果开辟失败,则返回NULL
返回值是void*,是指针,返回类型由情况定,如果需要整型,就是int*
free
free函数是用来释放动态内存的
void free (void* ptr);//ptr是malloc返回的指针
malloc和free都声明在 stdlib.h
头⽂件中
calloc
calloc和malloc一样都是动态内存分配
void* calloc (size_t num, size_t size);//开辟num个大小为size字节的空间
他和malloc的区别就是calloc会把申请的字节初始化
realloc
realloc函数就是让动态内存管理更加的灵活,作用是更改动态内存空间的大小
void* realloc (void* ptr, size_t size);
ptr就是开辟的动态空间的指针,size就是调整后的新大小,返回的void*为调整后的起始位置
realloc在调整内存空间的是存在两种情况:
- 情况1:原有空间之后有⾜够⼤的空间
- 情况2:原有空间之后没有⾜够⼤的空间
情况一就是在后面直接追加空间,情况二及时找另外一个合适的空间用
常见的错误
对NULL指针解引用
当开辟动态空间失败返回NULL时,在对指针解引用就会报错
对动态内存的越界访问
动态内存的和我们开辟出来的常量一样,不能被越界访问,否则会报错
对非动态开辟内存使用free释放
free只能用于动态空间的释放,不能用于非动态开辟内存
使用free释放一块动态开辟内存的一部分
动态空间必须全部释放,不能只释放一部分
对同⼀块动态内存多次释放
一块动态内存只能被释放一次
动态开辟内存忘记释放
会导致内存泄漏
所以动态开辟的空间⼀定要释放,并且正确释放!!!
今天的知识讲解完啦,如果觉得有用可以点一下赞和关注,也可以先收藏以防需要时找不到哦,当然如果作者写的哪里有问题欢迎指出,我们一起进步!!!
祝看到这里的人天天开心哦(笔芯)