C:在函数内声明的数组

时间:2013-08-22 11:04:15

标签: c arrays memory free

当我在函数内部声明一个数组(结构)时,返回后是否会自动释放内存,还是必须手动释放它?

mezo pre_tabla[8][8]

4 个答案:

答案 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]|
+----------+