使用 malloc後free出錯 錯誤所在

偶認爲: 這個問題是指針使用過程當中很容易出錯並且本身又很難發現的一個易疏忽問題———–即:指針人爲的更改了原來的指向地址。如下是一個很好的案例,其中紅色字體爲正確解。 問題: 用malloc與free出錯,望指導,謝謝 程序很簡單,用於測試他們的用法,由於在一個大點定程序中出錯想找緣由。數組

#include<stdlib.h>
void main()
{
char *test=malloc(100);
test="123";
free(test);
test=NULL;
}

問題補充: 哦,大概明白了點,謝謝。 我用sprintf(test,」23123141421%s」,test1);給char test賦值,可是若是不chartest=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出錯總結:指針

一、malloc與free配套使用。不要跨進程分配和釋放; 二、指向malloc申請的堆內存的指針,在運用過程當中千萬不要另外賦值,不然一樣致使內存泄露(我曾今翻過這樣的錯誤) 三、malloc後,實際使用時指針長度超過了你申請的範圍。再去free時確定出問題。 四、改變指針的初始指向地址,如上文。code

相關文章
相關標籤/搜索