請問 經由 free() 後 的指標 為何編譯器 仍然傳回 不為 0 的大小 |
尚未結案
|
small77
一般會員 發表:5 回覆:8 積分:2 註冊:2005-10-09 發送簡訊給我 |
我使用 borland c 32 編譯器 main()
{ char *p = (char *)malloc(1000);
printf("%ld\n",p); // 列印結果是 11544716
printf("%ld\n",_msize(p)); // 列印結果是 1000
free(p); printf("%ld\n",p); // 列印結果是 11544716
printf("%ld\n",_msize(p)); // 列印結果是 55152 <--- 不是 0 getche(); } 請問 記憶體已經被釋放 為何仍然傳回 不為 0 的大小
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
main() { char *p = (char *)malloc(1000); 配置1000byte給p字串指標 printf("%ld\n",p); 以長整數列印p字串的指標位址是 11544716 printf("%ld\n",_msize(p)); // 正確的列印p指標所指配置空間的大小是 1000 free(p); 釋放指標所指向的空間 printf("%ld\n",p); 以長整數再度列印p字串的指標位址是 11544716 printf("%ld\n",_msize(p)); p指標所指向的空間已經被釋放了,所以列出的內容毫無意義,只是記憶體空間中隨機剩下的垃圾,而非p指標原指向的位址,如果用在程式中會引發錯誤! getche(); }----------------------- Practice makes perfect. |
small77
一般會員 發表:5 回覆:8 積分:2 註冊:2005-10-09 發送簡訊給我 |
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
動態記憶體配置釋放與否,是要判斷指標而不是其所指的空間大小。
< class="code">
main()
{
char *p = (char *)malloc(1000);
printf("%ld\n",p);
printf("%ld\n",_msize(p));
free(p);
p = NULL; //標準保險作法 printf("%ld\n",p);
if ( p != NULL )
printf("%ld\n",_msize(p));
getche();
}
-----------------------
Practice makes perfect.
|
small77
一般會員 發表:5 回覆:8 積分:2 註冊:2005-10-09 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |