2016-05-27 2 views
0

Для некоторого кода, который я пишу, у меня есть указатель на функцию. Я использую его в течение некоторого времени, но я не знаю, нужно ли явно освобождать указатель. Вот упрощенная версия моего кодаДолжен ли я освобождать указатель на функцию?

struct Person 
{ 
    void (*action)(); 
} 

void action() 
{ 
    printf("Action has been called\n"); 
} 

int main() 
{ 
    Person p; 
    p->action = &action; 

    // My question is whether or not I need to do this 
    // free (p->action); 
    // p->action = NULL; 
} 

Спасибо.

+1

Вы говорите 'malloc'? –

+0

Вы выделили место для функции? Что вы понимаете, это указатель? –

+2

Вы освобождаете вещи, а не указатели на вещи. Вы хотите освободить функцию? – immibis

ответ

7

У меня есть указатель на функцию. Я использую его в течение некоторого времени, но я не знаю, нужно ли явно освобождать указатель.

No. Вам не нужно ничего освобождать с помощью free(), вы никогда не были динамически распределяемой с malloc() или одинаково.


На самом деле это было бы практически невозможно создать указатель на функцию с помощью malloc().

+0

'malloc()' может использоваться для выделения блока памяти, который затем заполняется инструкциями CPU и выполняется с помощью указателя функции. В этом случае вам понадобится 'free()' память, когда вы ее используете. –

+0

@RemyLebeau Конечно, я знаю. Вот почему я сказал, что практически невозможно. То, что вы требуете, требует странных хаков. –

+0

Спасибо. Это то, что я подумал, и я хотел быть уверенным, так как я делаю довольно большую программу с кучей таких вещей. – CNJMC1

2

Я не знаю, нужно ли явно освобождать указатель.

Ваша переменная action - это просто указатель. Вы не освобождаете указатель, вы освобождаете то, на что он указывает. Но так как не выделяют память для функции, на которую указана, вы не отвечаете за ее освобождение.

Смежные вопросы