我是C新手,我想知道是否可以在C中删除整个数组,而不仅仅是一个元素?在 C++ 中有, Cdelete[]
中有类似的东西吗?
8 回答
1)如果您的数组声明是以这种方式完成的:
int A[20];
无法删除您的数组,因为它是静态分配的
2)如果您的数组声明是以这种方式完成的:
int *A=malloc(20 * sizeof(int));
//or
int *A=calloc(20, sizeof(int));
您的数组可以被删除,free(A)
因为它是动态分配的
您可以只使用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);
当您在 C 中使用 分配内存时malloc
,一些额外的信息会存储在分配的块之后(或之前)。free
使用此信息来了解您首先分配了多少内存并将释放整个块。所以如果你只分配了一个元素,例如一个结构,它只会释放一个元素。如果您分配了整个结构数组,它将释放整个事物。
在 C++ 中,您使用new
andnew []
而不是 malloc,后者使用构造函数初始化值。这就是为什么有两种不同的delete
:一种用于单值(delete
),另一种用于数组(delete []
)。
如果您已经动态分配了数组(使用malloc()
),您只需使用free()
它来取消分配它。然后你不能再访问指针,因为你不再“拥有”内存。
在 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. */
否则,自动变量会自动释放。
如果您使用malloc()
/calloc
只需使用free()
:
type * ptr = malloc(n * sizeof(type));
if(ptr == NULL)
couldnt_allocate_memory();
/* ... */
free(ptr);
选项卡的创建:malloc 或 calloc 函数。然后释放函数来释放它
在 C 中,如果您将数组声明为静态 ex: int a[10],则无需删除。当您的函数结束或程序终止时,它将被释放。如果您使用任何内存分配技术 [malloc,calloc] 分配了内存,因为它是由您分配的,应该由您自己释放,并且您使用 free(ptr) 来释放分配的内存块。