【发布时间】:2020-02-26 19:33:23
【问题描述】:
我有一个 C 程序,它分配了一些缓冲区,在程序退出执行之前需要清除这些缓冲区。我的main 程序是这样的
int main(int argc, char** argv){
// Some code
// ...
// ...
void* data1 = malloc(someSize);
void* data2 = malloc(someSize);
double* result = malloc(resultSize);
double* buffer = malloc(buffSize);
// Some code
// ...
// First exit point
if(someExitcondition){
// free all allocated memory
exit(1);
}
// Some code
// ...
// Second exit point
if(someOtherExitcondition){
// free all allocated memory
exit(1);
}
// Some code
// ...
// free all allocated memory
return 0;
}
我想通过调用cleanUp() 函数来简化清理工作,该函数将free 分配在堆中的所有内存。我想在每个exit(1) 调用之前和return 0 行之前调用此函数(基本上将每个评论// free all allocated memory 替换为对cleanUp() 的调用)。 我的问题是如何将指针 data1,data2,result 和 buffer 传递给 cleanUp() 以便它们可以被释放?
这就是我想做的事情。这是正确的方法吗?
void cleanUp(void* p1, void* p2, void* p3, void* p4){
// call to free for each pointer
}
【问题讨论】:
-
我假设 cleanUp 只会在你退出之前被调用一次?
-
是的,我想在程序退出之前调用一次以清理所有分配的内存,但程序中可能有多个退出点
-
哦,我明白了。那么为什么你的 cleanUp 方法没有相同的声明呢?
-
public void cleanUp(void* data1, void* data2, double* result, double* buffer) -
将所有分配的缓冲区放在一个结构中;然后,您可以创建一个 cleanup() 方法,该方法将指向结构实例的指针作为其参数,并释放该方法中的所有缓冲区。您可以从结构实例在范围内的任何位置调用该方法。