偶認為:
這個問題是指標使用過程中很容易出錯而且自己又很難發現的乙個易疏忽問題———–即:指標人為的更改了原來的指向位址。以下是乙個很好的案例,其中紅色字型為正確解。
問題:
用malloc與free出錯,望指導,謝謝
程式很簡單,用於測試他們的用法,因為在乙個大點定程式中出錯想找原因。
#include
void main()
問題補充:
哦,大概明白了點,謝謝。
我用sprintf(test,」23123141421%s」,test1);給char *test賦值,但是如果不char*test=malloc();就出錯,用了也用free就出錯,不free就不出錯。。。
為什麼呢,請問?學習c不久。。。問題有點無趣,但就是不明白,請指教 謝謝
回答1:
前面我接到了,free()只用於釋放動態分配的空間,即malloc()/calloc()/realloc()函式分配的空間,否則不會成功.
test=」123」;
這樣,test就指向了乙個常量的位址,而不再是malloc()分配的空間位址,而free()只用於釋放動態分配的空間,所以出錯.
要想將」123」字串放在test陣列中,應該用strcpy()函式完成,或者對test陣列的每個元素進行單獨賦值.就是說要用memcpy或者strcpy將字元賦給test,而不能直接給test賦值
這樣會改變位址。
回答2:
你的意思想是想把「123」放到剛用malloc函式開闢的空間中去,從結構來分析,」123「這個字串並沒有放你原先開闢的空間中去。另外,malloc和free一般是配合來使用的,你後來test這個指標指向的已不是malloc開闢的區域了。也就是樓上所說的,free智慧型只能釋放動態記憶體。弄明白就行了。我也學習了。
malloc後free出錯總結:
1、malloc與free配套使用。不要跨程序分配和釋放;
2、指向malloc申請的堆記憶體的指標,在運用過程中千萬不要另外賦值,否則同樣導致記憶體洩露(我曾今翻過這樣的錯誤)
3、malloc後,實際使用時指標長度超過了你申請的範圍。再去free時肯定出問題。
4、改變指標的初始指向位址,如上文。
使用 malloc後free出錯 錯誤所在
偶認為 這個問題是指標使用過程中很容易出錯而且自己又很難發現的乙個易疏忽問題 即 指標人為的更改了原來的指向位址。以下是乙個很好的案例,其中紅色字型為正確解。問題 用malloc與free出錯,望指導,謝謝 程式很簡單,用於測試他們的用法,因為在乙個大點定程式中出錯想找原因。include void...
malloc與free簡單使用
寫 肯定少不了與記憶體打交道,今天就來聊一聊malloc和free的簡單使用 malloc用來開闢記憶體,一般用sizeof來獲得這個型別的大小,還有malloc返回的是void 所以經常申請記憶體後需要強制型別轉換,下面來看乙個例子 include include intmain 當然這個記憶體不...
關於malloc函式後free記憶體空間的疑問
1 關於malloc函式後free記憶體空間的疑問 問題 malloc是開出記憶體空間。現在我寫了這麼一句 char name name char malloc len sizeof char name指標是個char指標,指向乙個char資料,即只保留了乙個char資料的長度資訊.free的時候它...