我有兩個結構
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->new_socket = 1;
con->request= &request
如果我像 free(con) 一樣自由,那么我真的不認為我的請求指標被釋放了。我認為它的存在,我可以訪問它的元素,*(requests 0)->status這樣就可以了。如果我struct request requests可以在我的程式中的其他地方訪問,這是正確的理解嗎
uj5u.com熱心網友回復:
所以我真的不認為我的請求指標被釋放。
沒錯。free() 只釋放一個 malloc()。如果呼叫 malloc() 兩次,呼叫 free() 一次,則僅釋放兩個分配中的一個。
如果您運行此代碼:
struct request *requests = malloc(sizeof(struct request));
struct container *con=malloc(sizeof(struct container))
con->new_socket = 1;
con->request= &request;
free(con);
那么requests指標指向的堆記憶體將不會被釋放。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/361326.html
標籤:C
