7

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

4

8 回答 8

9

1)如果您的数组声明是以这种方式完成的:

int A[20];

无法删除您的数组,因为它是静态分配的

2)如果您的数组声明是以这种方式完成的:

int *A=malloc(20 * sizeof(int));
//or
int *A=calloc(20, sizeof(int));

您的数组可以被删除,free(A)因为它是动态分配的

于 2013-03-08T16:44:09.727 回答
7

您可以只使用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);
于 2013-03-08T16:35:00.250 回答
2

当您在 C 中使用 分配内存时malloc,一些额外的信息会存储在分配的块之后(或之前)。free使用此信息来了解您首先分配了多少内存并将释放整个块。所以如果你只分配了一个元素,例如一个结构,它只会释放一个元素。如果您分配了整个结构数组,它将释放整个事物。

在 C++ 中,您使用newandnew []而不是 malloc,后者使用构造函数初始化值。这就是为什么有两种不同的delete:一种用于单值(delete),另一种用于数组(delete [])。

于 2013-03-08T16:39:55.577 回答
1

如果您已经动态分配了数组(使用malloc()),您只需使用free()它来取消分配它。然后你不能再访问指针,因为你不再“拥有”内存。

于 2013-03-08T16:34:56.937 回答
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. */

否则,自动变量会自动释放。

于 2013-03-08T16:34:37.013 回答
0

如果您使用malloc()/calloc只需使用free()

type * ptr = malloc(n * sizeof(type));
if(ptr == NULL)
    couldnt_allocate_memory();
/* ... */
free(ptr);
于 2013-03-08T16:34:53.887 回答
0

选项卡的创建:malloc 或 calloc 函数。然后释放函数来释放它

于 2013-03-08T16:36:15.223 回答
0

在 C 中,如果您将数组声明为静态 ex: int a[10],则无需删除。当您的函数结束或程序终止时,它将被释放。如果您使用任何内存分配技术 [malloc,calloc] 分配了内存,因为它是由您分配的,应该由您自己释放,并且您使用 free(ptr) 来释放分配的内存块。

于 2013-03-08T16:37:50.030 回答