当我在函数中声明一个数组(结构)时,内存是在返回后自动释放还是必须手动释放?
mezo pre_tabla[8][8]
定义内部函数将在堆栈中分配内存,一旦函数范围死亡,该内存将被清除。使用动态内存分配将需要单独的空闲调用。
如果您静态声明数组,则无需手动释放它。但是,如果您动态分配数组(通过使用 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
如果未声明数组,则static
当程序超出声明数组的范围时,应释放内存。
所有局部变量/结构都分配在堆栈中。
当你进入函数时,你有一个堆栈指针,用于存储数据的地址与之相关。
当您从函数返回时,堆栈指针会更新以对应调用者函数,因此可以说内存是自动释放的。
+----------+
| |
| 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]|
+----------+