首页 > 解决方案 > 释放非 malloc 的内存

问题描述

假设我声明了以下数组:

char *arr[3];

在运行程序期间,根据用户的输入,我可能会也可能不会将内存字符串分配到这个数组中(意思是arr[i])。

free(arr[i])在程序结束时不检查我分配了哪些是否安全?或者这会导致错误吗?

谢谢!

标签: cvisual-studiomallocfree

解决方案


将空指针传递给 是安全的free,因此如果您的数组是用空指针初始化的,那么您可以安全地释放所有arr[i],假设您只存储由malloc()和朋友返回的指针,而不是在其他地方释放它们。

将数组定义为

char *arr[3] = { NULL, NULL, NULL };

或者干脆

char *arr[3] = { 0 };

NULL,0并且'\0'可用于指定空指针,但建议遵循简单的清晰规则:

  • 用于NULL空指针,
  • 用于0空整数,
  • 用于'\0'数组中的空字节,char也称为空终止符。

您可以将= { 0 };其用作任何 C 对象的初始化程序:所有元素和成员都将被初始化为其类型的零值,但只有第一个成员以这种方式初始化的联合除外。


推荐阅读