0

我正在编写一个代码,其中有几个功能。在每个函数中,有几个变量应该动态分配内存。这些函数被重复调用,因此分配一次内存并在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.js 中动态分配了内存。但是由于变量的数量很大,并且其中一些仅用于一个特定的函数,我决定将定义移到函数内部。但是,我不知道如何释放每个函数内部分配的内存。

4

3 回答 3

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);
}
于 2013-03-21T15:55:14.697 回答
0

您不能从 main 访问在 CalculateMismatch 中声明的变量。如果需要,则必须将声明移出CalculateMismatch(例如移至main),然后将它们作为参数传递给CalculateMismatch。

但是由于您即将退出 main 我认为您不需要释放任何东西。无论如何,当您的程序退出时,所有内存都将被释放。

编辑

您应该将声明variable1移至 main。然后将其CalculateMismatch作为参数传递给。

int main()
{
    double *variable1 = malloc(...);
    ...
    while (...)
    {
        CalculateMismatch(..., variable1);
    }
    ...
    free(variable1);
}
于 2013-03-21T15:45:11.350 回答
0

如果您想从多个函数访问动态分配的内存,但不想将指针作为参数传递,则在文件范围(全局)声明指针。声明后,您可以在需要它之前对其进行初始化malloc,然后每个函数都可以访问内存。否则,只需将指针传递给需要访问内存的每个函数,直到你使用free它为止。

C 中函数内部的静态变量是在函数调用之间保持其值并在程序运行之前初始化的变量,因此您不能使用malloc.

于 2013-03-21T15:56:24.407 回答