[問題] free 指令一問
各位版友,新年快樂,小弟有個問題想請教:
底下先說說我對 free() 的認知,若有誤請前輩指正:
書上告訴我們 free() 可以把配置的記憶體收回,
給我們系統自動幫我們把指標也一併做後續處理的錯覺。
但我爬文的結果卻是 free() 只是告訴系統該記憶體不使用。
只有「告訴」系統而已,我測試:
free( ptr );
printf("%d", ptr->someone); //someone 是一個int
free後,甚至還是可以印出它的值。
所以我們在free後還要自己擦屁股:
free( ptr );
ptr = NULL;
設定成 NULL 這裡我不確定,有誤請指正。
以上是我對 free() 的認知,底下是要問的問題:
#include <stdio.h>
#include <stdlib.h>
typedef struct myst {
int x;
long y;
unsigned char *arry;
} myst;
void delst(myst *ast)
{
free( ast->arry );
ast->arry = NULL;
printf("delst 之前 %p\n", ast);
free( ast );
ast = NULL;
printf("delst 之後 %p\n", ast);
}
int main()
{
printf("%d\n", sizeof(myst));
myst *ast = (myst *)malloc( sizeof(myst) );
ast->arry = (unsigned char *)malloc( sizeof(unsigned char)*5 );
printf("main 之前 %p\n", ast);
delst( ast );
printf("main 之後 %p\n", ast);
printf("執行 delst 之後 arry 的內容 %p\n", ast->arry);
return 0;
}
註:printf是在debug所以我往前縮一。
我的用意,是要用一個 delst() 來處理 free 的種種細項動作,讓程式簡潔。
但執行結果卻不如預期(底下是上面程式的執行結果):
12
main 之前 003E4848
delst 之前 003E4848
delst 之後 00000000
main 之後 003E4848 <-- 我覺得它有問題,不是應該要 00000000 才對嗎?
執行 delst 之後 arry 的內容 00000000
我要問的是,為何
「main 之後 003E4848」
而不是
「main 之後 00000000」
,換句話說就是呼叫副程式幫我 free 了以後,回到了 main 中怎麼記憶體位址
又回來了? 不是應該要是 NULL 才對嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.76.74.145
推
02/09 23:36, , 1F
02/09 23:36, 1F
→
02/09 23:36, , 2F
02/09 23:36, 2F
→
02/09 23:37, , 3F
02/09 23:37, 3F
→
02/09 23:39, , 4F
02/09 23:39, 4F
→
02/09 23:47, , 5F
02/09 23:47, 5F
→
02/09 23:48, , 6F
02/09 23:48, 6F
→
02/09 23:49, , 7F
02/09 23:49, 7F
→
02/09 23:52, , 8F
02/09 23:52, 8F
→
02/10 00:02, , 9F
02/10 00:02, 9F
→
02/10 00:02, , 10F
02/10 00:02, 10F
推
02/10 00:25, , 11F
02/10 00:25, 11F
推
02/10 01:43, , 12F
02/10 01:43, 12F
→
02/10 13:39, , 13F
02/10 13:39, 13F
→
02/10 13:46, , 14F
02/10 13:46, 14F
→
02/10 14:22, , 15F
02/10 14:22, 15F
→
02/10 14:55, , 16F
02/10 14:55, 16F
→
02/10 15:33, , 17F
02/10 15:33, 17F
推
02/11 00:11, , 18F
02/11 00:11, 18F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章