освобождение контейнера освобождает дочерний элемент, как выделенный в куче. Я не думаю, что

#c

Вопрос:

У меня есть две структуры

 struct request {  char *request;  char *rand;  int status;  } struct container  {  int new_socket;  struct request **request; }  

допустим, я создаю указатель запроса

 struct request *requests = malloc(sizeof(struct request));  

и я создаю указатель, указывающий на пространство в куче контейнеров, таких как

 struct container *con=malloc(sizeof(struct container))  

и я это делаю

 con-gt;new_socket = 1;  con-gt;request= amp;request  

и если я свободен, как свободный(мошенник), И поэтому я действительно не думаю, что мои запросы будут освобождены. Я думаю, что он присутствует, и я могу получить доступ к его элементам, таким как *(requests 0)-gt;status , и это будет нормально. Правильно ли это понимание, если я struct request requests доступен где-то еще в моей программе

Ответ №1:

И поэтому я действительно не хочу, чтобы мои запросы были освобождены.

Это верно. функция free() освобождает только один malloc(). Если вы дважды вызовете функцию malloc() и один раз вызовете функцию free (), то освободится только одно из двух выделений.

Если вы запустите этот код:

 struct request *requests = malloc(sizeof(struct request)); struct container *con=malloc(sizeof(struct container)) con-gt;new_socket = 1; con-gt;request= amp;request; free(con);  

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

Комментарии:

1. что делать, если после освобождения я также назначу нулевое значение con, тогда мои запросы будут НУЛЕВЫМИ или все хорошо и могут быть доступны

2. @user786 Все хорошо. Установка con в значение NULL не влияет на значение запросов или на то, освобождаются ли запросы.