C语言中的内存分配/释放
我知道在像c这样的语言中,我需要在分配内存后释放内存。(我来自爪哇),关于这一点,我有几个问题:C语言中的内存分配/释放,c,arrays,malloc,declaration,C,Arrays,Malloc,Declaration,我知道在像c这样的语言中,我需要在分配内存后释放内存。(我来自爪哇),关于这一点,我有几个问题: 当我在做: int array[30]; (即创建一个大小为30个整数的数组)这与 做什么 int array[] = malloc(sizeof(int)*30); 作为第一个问题的顺序,当我创建数组时 函数内部(即函数的局部性而非全局性) 整个文件),是否需要释放内部此阵列的内存 我在哪里创建它的函数?(我看没有别的办法了 释放它,因为我无法将创建的所有数组的引用传递回 mai
int array[30];
(即创建一个大小为30个整数的数组)这与
做什么
int array[] = malloc(sizeof(int)*30);
int array[30];
int * array = (int *)malloc(sizeof(int)*30);
这是在堆栈上,当它超出范围时,将自动为您清理
如果你说
int array[30];
int * array = (int *)malloc(sizeof(int)*30);
内存将在空闲存储(堆)上分配,您负责释放它
free(array);
无论代码是在函数调用中还是在main中,都同样适用。
如果您使用malloc
,如果您说
int array[30];
int * array = (int *)malloc(sizeof(int)*30);
这是在堆栈上,当它超出范围时,将自动为您清理
如果你说
int array[30];
int * array = (int *)malloc(sizeof(int)*30);
内存将在空闲存储(堆)上分配,您负责释放它
free(array);
无论代码是在函数调用中还是在main中,都同样适用。
如果使用
malloc
,则需要使用free
如果使用int-array[30]
,则在堆栈上分配数组,并且它只存在于创建它的范围内。
如果使用malloc
,则必须使用free
手动释放内存
这两种方法各不相同,服务于不同的需求。堆栈分配的变量/对象具有有限的作用域,而您可以使用超出本地作用域的malloc
'd对象
使用带有指针的malloc
,不过:
int *array = malloc(sizeof(int)*30);
如果使用
int-array[30]
,则在堆栈上分配数组,并且它只存在于创建它的范围内。
如果使用malloc
,则必须使用free
手动释放内存
这两种方法各不相同,服务于不同的需求。堆栈分配的变量/对象具有有限的作用域,而您可以使用超出本地作用域的malloc
'd对象
使用带有指针的malloc
,不过:
int *array = malloc(sizeof(int)*30);
不,一点也不一样 第一种方法使用“自动分配”来保留内存,这通常在堆栈上。一旦对象超出范围,该内存将自动取消分配,例如在函数返回时 第二种方法使用
malloc()
在堆上分配内存;不再需要时,必须使用free()
取消分配此内存
此外,正确的语法是:
int *array = malloc(30 * sizeof *int);
你不能像C中那样使用
[]
。不,它一点都不一样
第一种方法使用“自动分配”来保留内存,这通常在堆栈上。一旦对象超出范围,该内存将自动取消分配,例如在函数返回时
第二种方法使用malloc()
在堆上分配内存;不再需要时,必须使用free()
取消分配此内存
此外,正确的语法是:
int *array = malloc(30 * sizeof *int);
您不能像在C中那样使用
[]
。一旦数组超出范围,您的数组int-array[30]
将被放在堆栈上,其分配内存将自动释放。但是,当您使用malloc/calloc/realloc
分配内存时,您需要显式释放该内存。您的数组int数组[30]
将被放在堆栈上,一旦array
超出范围,其分配内存将自动释放。但是,当您使用malloc/calloc/realloc
分配内存时,您需要显式地释放该内存。基本上malloc
在堆中分配内存,并且在失去作用域后不会被释放。因此,使用malloc
分配的内存应该使用free
释放,基本上malloc
在堆中分配内存,并且在失去作用域后不会释放。因此,使用malloc
分配的内存应该使用free
释放。请看一看。这不是答案,但肯定会有一些启发。@user2030118请使用I而不是I进行自我参考。感谢链接,我将看一看请看一看。这不是答案,但肯定会有一些启发。@user2030118请使用i而不是i作为自我参考。感谢链接,我将看一看。非常感谢简单而伟大的答案!非常感谢您的简单和伟大的答案!