c - 释放非 malloc 的内存
问题描述
假设我声明了以下数组:
char *arr[3];
在运行程序期间,根据用户的输入,我可能会也可能不会将内存字符串分配到这个数组中(意思是arr[i]
)。
free(arr[i])
在程序结束时不检查我分配了哪些是否安全?或者这会导致错误吗?
谢谢!
解决方案
将空指针传递给 是安全的free
,因此如果您的数组是用空指针初始化的,那么您可以安全地释放所有arr[i]
,假设您只存储由malloc()
和朋友返回的指针,而不是在其他地方释放它们。
将数组定义为
char *arr[3] = { NULL, NULL, NULL };
或者干脆
char *arr[3] = { 0 };
NULL
,0
并且'\0'
可用于指定空指针,但建议遵循简单的清晰规则:
- 用于
NULL
空指针, - 用于
0
空整数, - 用于
'\0'
数组中的空字节,char
也称为空终止符。
您可以将= { 0 };
其用作任何 C 对象的初始化程序:所有元素和成员都将被初始化为其类型的零值,但只有第一个成员以这种方式初始化的联合除外。
推荐阅读
- svg - 在 SVG 中,我们可以在 desc 标签内格式化文本吗?
你好
世界 - php - 检查两个集合的差异
- android - 启用远程js调试时React Native应用程序没有网络连接
- angular - Mat datepicker 仅格式化多个选择器之一
- php - 如何将输入限制为两倍?
- vb.net - 我需要帮助将此 C# Linq 查询转换为 VB.net。我不太了解某些方面
- flutter - 为什么 SearchDelegate 的 buildSuggestion 方法不起作用?
- java - 使用哈希映射(键/值对)处理帖子表单的成语
- artifactory - Artifactory OSS版无维护操作
- angular - 当我在 Angular 中导航到其路由的子子项时,如何保持 mat-tab 处于活动状态?