2013-03-21 5 views
1

Если я следующее функции:объем STRUCT указателей в функции

struct example *A=malloc(sizeof(struct example)); 

делает пространство узел/память создается там, где A указывает на разрушаться после того, как функция заканчивается/листья? Или он остается в куче?

+1

, когда функция завершается * A (указатель) на стек уничтожается, но память, выделенная для * A, все еще существует. Поскольку эта память больше не имеет действительного указателя, ее структура из системной памяти, т.е. называется утечкой памяти. Поэтому вы должны использовать free() всегда с malloc(); – linuxD

ответ

1

№ памяти, выделенной malloc, останется выделенной до free 'd.

делать вещи, как это:

char * function(void) 
{ 
    char c = 'a'; 
    return &c; 
} 

с другой стороны, это плохо, потому что этот объект действительно выходит за рамки, когда функция заканчивается.

malloc выделяет память на кучу. Объявление переменных выделяет пространство в стеке. На стек влияет область видимости, куча - нет.

Для получения дополнительных сведений об использовании указателей, включая различные ошибки, такие как утечки памяти (процесс потери ссылки на malloc 'd-память, чтобы она сохранялась навсегда), посетите this link.

+0

Благодарим вас за информацию – user2122810

1

Вы должны free все, что вы malloc. Когда ваша функция возвращается, переменная A выходит за пределы области видимости, но ваша память остается выделенной. Поскольку вы потеряли указатель на память (если не сохранены в другом месте), вы находитесь leaking memory.

Если вам по-прежнему нужна память, на которую указывает A, вы можете вернуть указатель на выделенную структуру и освободить ее позже. Если вам не нужна выделенная память, как только ваша функция вернется, освободите память с помощью free(A).

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