私はCが初めてで、 Cで要素だけでなく配列全体を削除できるかどうか疑問に思っています。C++ には がありますが、 Cdelete[]
にも似たようなものはありますか?
8 に答える
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);
配列を動的に(を使用して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);
Cでは、配列をstatic ex:int a [10]として宣言している場合、削除する必要はありません。関数が終了するか、プログラムが終了すると、解放されます。メモリ割り当て手法[malloc、calloc]のいずれかを使用してメモリを割り当てた場合、メモリは自分で割り当てられるため、自分で解放する必要があります。割り当てられたメモリブロックを解放するには、free(ptr)を使用します。
タブの作成: malloc または calloc 関数。そして、それを解放する無料の関数