我正在编写一个代码,其中有几个函数。在每个函数中,有几个变量应该动态分配内存。这些函数被重复调用,因此分配内存一次并在main
的末尾释放它是合乎逻辑的。
main
函数如下所示:
//Some code here
while (err < tolerance){
CalculateMismatch(M, err);
//Update M and err and do other things
}
//Here is end of main, where I should free all the memories being allocated dynamically in other functions
此代码显示多次调用CalculateMismatch
。所以,我只在这个函数中分配一次内存。像这样:
function CalculateMismatch(Some arguments){
//The following line is illegal in C, but I do not know how to allocate the memory just once and reuse it several times.
static double *variable1 = malloc(lengthofVar1 * sizeof(variable1));
//Rest of the code
}
我的问题是我不知道如何访问CalculateMismatch
中main
中定义的变量。请告诉我如何释放变量,或者是否有更有效的方式来分配和释放内存。
感谢您的帮助。
提供有关我的代码的更多详细信息: 到目前为止,我已经全局定义了所有变量,并在main中动态分配了内存。但由于变量的数量很大,而且其中一些仅在一个特定函数中使用,我决定在函数内部移动定义。但是,我不知道如何释放每个功能内部分配的记忆。
答案 0 :(得分:2)
这是不正确的:
static double *variable1 = malloc(lengthofVar1 * sizeof(variable1));
你可能想要:
static double *variable1 = malloc(lengthofVar1 * sizeof(*variable1));
不幸的是,你无法从函数外部释放这个变量,除非你做了一些事情来传回它。
对此没有直接的解决方案。一种解决方案当然是将变量移出一步:
static double *variable1 = 0;
function CalculateMismatch(Some arguments){
if (!variable1) variable1 = malloc(lengthofVar1 * sizeof(*variable1));
//Rest of the code
}
...
int main(...)
{
...
free(variable1);
}
答案 1 :(得分:0)
您无法从main访问CalculateMismatch中声明的变量。如果需要,则必须将声明移出CalculateMismatch(例如main),然后将它们作为参数传递给CalculateMismatch。
但是因为你即将离开主要我不认为你需要释放任何东西。无论如何,当程序退出时,所有内存都将被释放。
修改强>
您应该将variable1
的声明移至main。然后将其作为参数传递给CalculateMismatch
。
int main()
{
double *variable1 = malloc(...);
...
while (...)
{
CalculateMismatch(..., variable1);
}
...
free(variable1);
}
答案 2 :(得分:0)
如果要从多个函数访问动态分配的内存,但又不想将指针作为参数传递,则将指针声明在文件范围(全局)。声明后,您可以在malloc
需要之前初始化它,然后每个函数都能够访问内存。否则,只需将指针传递给需要访问内存的每个函数,您可以使用它直到free
。
C中函数内的静态变量是一个在函数调用之间保持其值的函数,并在程序运行之前初始化,因此您无法使用malloc
对其进行初始化。