如何在 C 中自动释放多个 malloc?
How can I free automatically multiple malloc in C?
我想 free
在 C 程序的末尾自动多重 malloc
ed 内存。
例如:
str1 = malloc(sizeof(char) * 10);
str2 = malloc(sizeof(char) * 10);
str3 = malloc(sizeof(char) * 10);
我不想要这样的功能:
void my_free()
{
free(str1);
free(str2);
free(str3);
}
而是一个释放程序中分配的所有内存的函数。
but a function which free all the memory allocated during the program.
C中没有这样的函数。C不会自动进行内存管理。因此,您有责任跟踪内存分配并适当地释放它们。
大多数现代操作系统(也许不是嵌入式系统)会在进程终止时回收执行期间分配的内存。所以你可以跳过调用 free()
。但是,如果您的应用程序是一个长 运行 的应用程序,那么如果它一直分配内存,这将成为一个问题。根据您的应用程序,您可以设计一种策略来适当地释放内存。
正如 Blue Moon 在他的回答中指出的那样,与其他语言相比,C 语言的主要特点之一是缺少内存管理。虽然这为您提供了很大的自由,但另一方面可能会导致您的代码出现严重错误。
从技术上讲,不可能以 100% 的置信度检测内存泄漏,但是有相当强大的静态代码分析器可以指导您。
在我工作的最后一个嵌入式项目中,我们使用了 FlexeLint。非商业产品的成本很高,但好处是巨大的。使用这样的静态分析器甚至可以在不执行代码的情况下检测到许多潜在的错误和泄漏。
还有另一个静态分析器,开源项目免费,叫做 Coverity Scan。我自己没有尝试过,但可能值得一试。
在见证了像 FlexeLint 这样的优秀分析器能够检测到不仅仅是编译错误之后,如果没有这样的分析工具,我个人不会启动另一个 C 项目。
虽然这不是您问题的直接答案,但它可以改进您的工作流程,因为在大多数情况下会检测到忘记 free
调用等错误。
我想 free
在 C 程序的末尾自动多重 malloc
ed 内存。
例如:
str1 = malloc(sizeof(char) * 10);
str2 = malloc(sizeof(char) * 10);
str3 = malloc(sizeof(char) * 10);
我不想要这样的功能:
void my_free()
{
free(str1);
free(str2);
free(str3);
}
而是一个释放程序中分配的所有内存的函数。
but a function which free all the memory allocated during the program.
C中没有这样的函数。C不会自动进行内存管理。因此,您有责任跟踪内存分配并适当地释放它们。
大多数现代操作系统(也许不是嵌入式系统)会在进程终止时回收执行期间分配的内存。所以你可以跳过调用 free()
。但是,如果您的应用程序是一个长 运行 的应用程序,那么如果它一直分配内存,这将成为一个问题。根据您的应用程序,您可以设计一种策略来适当地释放内存。
正如 Blue Moon 在他的回答中指出的那样,与其他语言相比,C 语言的主要特点之一是缺少内存管理。虽然这为您提供了很大的自由,但另一方面可能会导致您的代码出现严重错误。
从技术上讲,不可能以 100% 的置信度检测内存泄漏,但是有相当强大的静态代码分析器可以指导您。
在我工作的最后一个嵌入式项目中,我们使用了 FlexeLint。非商业产品的成本很高,但好处是巨大的。使用这样的静态分析器甚至可以在不执行代码的情况下检测到许多潜在的错误和泄漏。
还有另一个静态分析器,开源项目免费,叫做 Coverity Scan。我自己没有尝试过,但可能值得一试。
在见证了像 FlexeLint 这样的优秀分析器能够检测到不仅仅是编译错误之后,如果没有这样的分析工具,我个人不会启动另一个 C 项目。
虽然这不是您问题的直接答案,但它可以改进您的工作流程,因为在大多数情况下会检测到忘记 free
调用等错误。