317 字
2 分钟
--
动态内存分配以及free函数的使用
2023-10-23

动态内存分配以及free函数的使用#

malloc 函数#

int *a = (int *)malloc(n * sizeof(int));

在这里,我们要开辟一块儿新的地址。

开辟的新地址用来存放指针a。malloc返回的类型是void,a是int形的,所以要把类型转换成int,用了强制转换(int *),n是数组a的长度,我们需要获取n*sizeof(int)长度的地址。

一旦对a进行了这样的操作,就可以把指针a当作数组使用。

free 函数#

当然,申请了这样的内存之后必须要还回去,所以需要另一个操作:

free(a);

注意事项#

不能连续free两次#

地址发生变化后不能对原地址free#

进行了free之后我们需要把指针制空,否则会变为一个野指针干扰我们程序的运行,就是这样:

a = (int *)malloc(number * sizeof(int));
free(a);
printf("%d", a); // 这样的情况会输出野指针,杂乱的地址

所以需要进行制空:

a = NULL;
printf("%d", a);

这样子再去输出a就不会有乱地址了。

特别提醒#

动态内存分配获得的指针最好不要进行运算,不要改变它的指向,否则会出现无法释放的情况。

动态内存分配以及free函数的使用
https://vilstia.org/posts/学习笔记/c/动态内存分配以及free函数的使用/
作者
琴泠 - Lumina Qin
发布于
2023-10-23
许可协议
CC BY-NC-SA 4.0