C语言中的内存分配/释放

C语言中的内存分配/释放,c,arrays,malloc,declaration,C,Arrays,Malloc,Declaration,我知道在像c这样的语言中,我需要在分配内存后释放内存。(我来自爪哇),关于这一点,我有几个问题: 当我在做: int array[30]; (即创建一个大小为30个整数的数组)这与 做什么 int array[] = malloc(sizeof(int)*30); 作为第一个问题的顺序,当我创建数组时 函数内部(即函数的局部性而非全局性) 整个文件),是否需要释放内部此阵列的内存 我在哪里创建它的函数?(我看没有别的办法了 释放它,因为我无法将创建的所有数组的引用传递回 mai

我知道在像c这样的语言中,我需要在分配内存后释放内存。(我来自爪哇),关于这一点,我有几个问题:

  • 当我在做:

    int array[30];      
    
    (即创建一个大小为30个整数的数组)这与 做什么

    int array[] = malloc(sizeof(int)*30);
    
  • 作为第一个问题的顺序,当我创建数组时 函数内部(即函数的局部性而非全局性) 整个文件),是否需要释放内部此阵列的内存 我在哪里创建它的函数?(我看没有别的办法了 释放它,因为我无法将创建的所有数组的引用传递回 main()函数)

  • 简言之,我想知道什么时候需要为创建的对象/基本体释放内存(在函数内部或外部)

    如果你说

    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作为自我参考。感谢链接,我将看一看。非常感谢简单而伟大的答案!非常感谢您的简单和伟大的答案!