#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 не влияет на значение запросов или на то, освобождаются ли запросы.