在 C 语言中,清理内存主要是指释放动态分配的内存。C 语言使用 `malloc`、`calloc` 或 `realloc` 等函数来分配内存,而释放这些内存则使用 `free` 函数。
1. 动态内存分配
使用 `malloc`、`calloc` 或 `realloc` 动态分配内存:
```c
int *ptr = (int*)malloc(sizeof(int) * 10); // 分配 10 个整数大小的内存
```
2. 释放内存
使用 `free` 函数释放之前分配的内存:
```c
free(ptr); // 释放内存
```
3. 清空指针
虽然 `free` 会释放内存,但它不会自动将指针置为 `NULL`。为了避免在后续操作中使用悬挂指针,通常在释放内存后,将指针设置为 `NULL`:
```c
ptr = NULL; // 防止悬挂指针
```
注意事项:
- 避免重复释放: 在 `free` 之后再次调用 `free` 会导致程序崩溃,因而要确保每块内存只被释放一次。
- 避免未释放内存: 如果你在程序中分配了内存而没有释放,这会导致内存泄漏,程序运行过程中内存不断增长,最终可能导致系统内存耗尽。
示例代码:
```c
#include
#include
int main() {
// 动态分配内存
int *arr = (int*)malloc(10 * sizeof(int));
if (arr == NULL) {
printf("内存分配失败\n");
return 1;
}
// 使用内存
for (int i = 0; i < 10; i++) {
arr[i] = i * i;
}
// 打印内存中的数据
for (int i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// 释放内存并将指针置为 NULL
free(arr);
arr = NULL;
return 0;
}
```
通过合理的内存管理,可以有效避免内存泄漏等问题,保持程序的稳定性。