目次から探す
動的な配列の解放方法
動的な配列を使用する場合、メモリの解放は非常に重要です。
メモリを解放しないと、プログラムがメモリを無駄に消費し続け、最終的にはメモリリークが発生します。
メモリリークはプログラムのパフォーマンスを低下させるだけでなく、予期しないエラーやクラッシュの原因となる可能性もあります。
C言語では、動的に割り当てられたメモリを解放するために、 free()
関数を使用します。
free()
関数は、 malloc()
や calloc()
などで割り当てられたメモリを解放するために使用されます。
以下に、動的な配列を解放するための基本的な手順を示します。
- 動的な配列を使用するコードの最後に、
free()
関数を使用してメモリを解放する処理を追加します。
free(配列名);
free()
関数を呼び出す前に、配列がNULL
でないことを確認します。
NULL
でない場合にのみ、メモリを解放します。
if (配列名 != NULL) {
free(配列名);
}
free()
関数を呼び出した後は、解放したメモリを使用しないように注意してください。
解放したメモリを使用すると、未定義の動作が発生する可能性があります。
以下に、具体的な例を示します。
#include <stdio.h>
#include <stdlib.h>
int main() {
int* numbers = malloc(5 * sizeof(int)); // int型の要素を5つ持つ動的な配列を生成
if (numbers != NULL) {
// 配列に値を代入
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
numbers[3] = 4;
numbers[4] = 5;
// 配列の要素を表示
for (int i = 0; i < 5; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
free(numbers); // メモリを解放
numbers = NULL; // ポインタをNULLに設定
}
return 0;
}
上記の例では、 malloc()
関数を使用して5つの要素を持つ動的な配列を生成し、値を代入しています。
その後、 free()
関数を使用してメモリを解放し、ポインタをNULL
に設定しています。
メモリを解放する際には、必ず対応する malloc()
や calloc()
の呼び出しと対応させるようにしてください。
また、同じメモリを複数回解放することは避けてください。