当我在函数内部声明一个数组(结构)时,返回后是否会自动释放内存,还是必须手动释放它?
mezo pre_tabla[8][8]
答案 0 :(得分:2)
定义内部函数将给出堆栈中的内存,一旦函数作用域消失就会被清除。使用动态内存分配将需要单独的免费调用。
答案 1 :(得分:1)
如果静态声明数组,则无需手动释放它。但是如果你动态分配数组(通过使用malloc()或calloc()),那么你需要手动释放它。对于前 -
下面的静态声明:
struct info {
char p;
int x;
};
struct info arr[10]; // doesn't require to free it.
动态分配如下:
struct info *c;
c = malloc(sizeof(info) * 10); // dynamic memory allocation, needs to be freed via free() system call
答案 2 :(得分:1)
如果数组未声明为static
,则当程序超出声明数组的范围时,应释放内存。
答案 3 :(得分:1)
所有局部变量/结构都在堆栈中分配。
当您输入该函数时,您有一个堆栈指针,用于存储数据的地址与它相关。
当你从函数返回时,堆栈指针会更新以对应调用函数,因此可以说,内存是自动释放的。
+----------+
| |
| f1 var1 |<--- f1() stack pointer
| f1 var2 |
| f1 arr[0]|
| ..... |
| f1 arr[N]|
| f2 var1 |<--- f2() stack pointer
| f2 var2 |
| f1 arr[0]|
| ..... |
| f1 arr[N]|
+----------+