1

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

mezo pre_tabla[8][8]
4

4 回答 4

2

定义内部函数将在堆栈中分配内存,一旦函数范围死亡,该内存将被清除。使用动态内存分配将需要单独的空闲调用。

于 2013-08-22T11:07:07.857 回答
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
于 2013-08-22T11:07:29.120 回答
1

如果未声明数组,则static当程序超出声明数组的范围时,应释放内存。

于 2013-08-22T11:07:51.890 回答
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]|
+----------+
于 2013-08-22T11:12:54.703 回答