静态动态数组释放内存
在C语言中定义变量时经常需要手动释放内存,避免程序运行时随着时间推移所占内存越来越多最终崩溃。那么什么变量需要我们手动去释放内存呢。
在定义一个静态变量或数组时,在编译阶段编译器就知道需要分配多少内存了,这就是静态分配。
当我们想定义一个动态的变量和数组,比如:
int p = (int *) malloc(sizeof(int));
或者
int *arr = (int *) malloc(n * sizeof(int));
时,编译器在编译时不能确定需要分配多少内存,需要用户使用时手动输入,所以需要在输入时为该数组动态分配内存。
静态分配的内存在栈里,每进入一个函数时都会建栈,栈里会存放函数用到的参数、局部变量等信息,函数执行完以后,会出栈销毁栈,这个过程就会释放你静态分配的数组内存,这是由系统自动完成的。
动态分配的内存,实际在堆上,系统没法自动帮你去释放堆上的内存,需要你自己写free或者delete来告诉操作系统需要帮你去释放堆上哪个位置的内存。
所以,记得在程序结束之前用free(arr);来释放自己定义过的动态内存哦。