Я пишу код, в котором есть несколько функций. В каждой функции есть несколько переменных, для которых память должна быть распределена динамически. Функции вызываются многократно, поэтому логично выделять память один раз и освобождать ее в конце main
.Свободная динамически распределенная память, определяемая ключевым словом static в C
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
. Пожалуйста, дайте мне знать, как я должен освобождать переменные или нет или нет более эффективного способа выделения и освобождения памяти. Спасибо за вашу помощь заранее.
Чтобы предоставить более подробную информацию о моем коде: До сих пор я определял все переменные глобально и динамически выделял память в основном. Но так как число переменных велико, а некоторые из них используются только в одной конкретной функции, я решил переместить определение внутри функций. Но я не знаю, как освободить память, выделенную внутри каждой функции.
Это C или C++? В каждом случае ответ будет очень разным. –
У вас не может быть статическая переменная, инициализированная с помощью 'malloc' в C. – teppic
Я пишу код в C. – Pouya