我是 C 的新手,我想知道是否可以在 C 中删除整个数组,而不仅仅是元素?
在C ++中有delete[]
, C 中有类似内容吗?
答案 0 :(得分:6)
您可以使用free
删除动态分配的数组。
int* array = malloc(10*sizeof(int));
...
free(array);
如果为每个数组元素分配了内存,则还需要先free
每个元素。
char** array = malloc(10*sizeof(char*));
for (int i=0; i<10; i++) {
array[i] = malloc(i);
}
....
for (int i=0; i<10; i++) {
free(array[i]);
}
free(array);
答案 1 :(得分:5)
1)如果以这种方式完成数组的声明:
int A[20];
您的数组无法删除,因为它已静态分配
2)如果以这种方式完成数组的声明:
int *A=malloc(20 * sizeof(int));
//or
int *A=calloc(20, sizeof(int));
您的数组可以使用free(A)
删除,因为它已动态分配
答案 2 :(得分:1)
如果您已动态分配数组(使用malloc()
),则只需使用free()
取消分配它。然后你就不能再访问指针,因为你不再“拥有”内存。
答案 3 :(得分:1)
使用malloc
在C中分配内存时,会在分配的块之后(或之前)存储一些额外信息。 free
使用此信息来了解您首先分配了多少内存并释放整个块。
因此,如果您只分配了一个元素,例如一个struct,它将只释放一个元素。如果你分配了整个struct数组,它将释放整个结构。
在C ++中,您使用new
和new []
而不是malloc,它使用构造函数初始化值。这就是为什么有两个不同的delete
:一个用于单个值(delete
),一个用于数组(delete []
)。
答案 4 :(得分:0)
在C ++中,除非您使用delete
,否则不要致电new
。如果您没有使用动态分配,则不会释放内存。
在C中,如果要控制数组的生命周期,请查看malloc
和free
。
#include <stdlib.h>
int *array = malloc (size_in_bytes);
/* Some stuff. */
free (array); /* When I don't need it anymore. */
否则,会自动释放自动变量。
答案 5 :(得分:0)
如果您使用malloc()
/ calloc
,只需使用free()
:
type * ptr = malloc(n * sizeof(type));
if(ptr == NULL)
couldnt_allocate_memory();
/* ... */
free(ptr);
答案 6 :(得分:0)
创建选项卡:malloc或calloc函数。然后自由功能解除分配
答案 7 :(得分:0)
在C中,如果您将阵列声明为静态 ex:int a [10],无需删除。当函数结束或程序终止时,它将被释放。如果你已经使用任何内存分配技术[malloc,calloc]分配了内存,因为它是由你自己分配的,应该自己释放并使用free(ptr)来释放已分配的内存块。