推荐答案
// www.javascriptcn.com code example
#include <stdlib.h>
int main() {
int *ptr = (int *)malloc(sizeof(int) * 10); // 分配内存
if (ptr == NULL) {
// 处理内存分配失败的情况
return 1;
}
// 使用分配的内存
for (int i = 0; i < 10; i++) {
ptr[i] = i;
}
free(ptr); // 释放内存
ptr = NULL; // 将指针置为NULL,避免悬空指针
return 0;
}本题详细解读
1. free 函数的作用
free 函数用于释放之前通过 malloc、calloc 或 realloc 等函数动态分配的内存。释放后的内存可以被系统重新分配使用。
2. free 函数的语法
void free(void *ptr);
ptr:指向要释放的内存块的指针。该指针必须是之前通过malloc、calloc或realloc分配的内存块的起始地址。
3. 使用 free 的注意事项
- 释放后指针置空:释放内存后,建议将指针置为
NULL,以避免悬空指针(dangling pointer)问题。 - 不要重复释放:对同一块内存多次调用
free会导致未定义行为。 - 不要释放未分配的内存:对未通过
malloc、calloc或realloc分配的内存调用free也会导致未定义行为。 - 不要释放栈上的内存:
free只能用于释放堆上的内存,栈上的内存由系统自动管理,不能手动释放。
4. 示例代码解析
- 内存分配:使用
malloc分配了 10 个int类型的内存空间。 - 内存使用:通过循环将 0 到 9 的值赋给分配的内存。
- 内存释放:使用
free释放分配的内存,并将指针置为NULL,避免悬空指针问题。
5. 常见错误
- 忘记释放内存:这会导致内存泄漏,长时间运行的程序可能会耗尽系统内存。
- 释放后继续使用指针:释放后的指针指向的内存已经无效,继续使用会导致程序崩溃或未定义行为。