看起來有問題,但是運行起來卻沒有問題,/*我的代碼*/#include#include#includeintmain(){char*p=NULL;p=(char*)malloc(4*sizeof(char));free(p);/****這里已經釋放了p指向的內存塊****/strcpy(p,"abc");printf("%s\n",p);retrun0;}/*free(p)釋放了p指向的內存塊,但是并沒有改變p本身。于是產生了懸空指針,此時p不再指向有效的內存塊,strcpy函數修改了p指向的內存塊,卻沒有造成程序崩潰,為啥?****不科學?。?/本人再MacOSX10.9上編譯,運行卻沒有出錯。求解釋》》》!?。?
2 回答

絕地無雙
TA貢獻1946條經驗 獲得超4個贊
通俗點說,你吃完了雪糕把木棍扔在垃圾桶里,往前走了兩步突然靈光一現,又回去垃圾桶把木棍撿出來舔一下。你看,只要你動作夠快,在垃圾車收垃圾之前是能在垃圾桶里找回來那根木棍的但顯然的使用free掉的內存和舔垃圾桶里撿來的木棍一樣腦殘,說不定你就撿到別人扔的木棍了