在C中删除整个数组

时间:2013-03-08 16:33:19

标签: c arrays

我是 C 的新手,我想知道是否可以在 C 中删除整个数组,而不仅仅是元素? 在C ++中有delete[] C 中有类似内容吗?

8 个答案:

答案 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 ++中,您使用newnew []而不是malloc,它使用构造函数初始化值。这就是为什么有两个不同的delete:一个用于单个值(delete),一个用于数组(delete [])。

答案 4 :(得分:0)

在C ++中,除非您使用delete,否则不要致电new。如果您没有使用动态分配,则不会释放内存。

在C中,如果要控制数组的生命周期,请查看mallocfree

#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)来释放已分配的内存块。