C語言程式設計時使用MALLOC後一直沒有用FREE函式釋放記憶體

2022-03-06 05:03:51 字數 4231 閱讀 8595

1樓:楊小丟

你這裡程式有問題:

struct card card[80];struct card *pcard;

這裡card[80]是陣列,已經自動分配空間了;

如果需要指標pcard指向這個空間,直接pcard = card;就可以了,

不用再pcard = (struct card *)malloc( sizeof(struct card));if (pcard == null)分配空間了

2樓:匿名使用者

如果不適用free釋放記憶體,會造成記憶體洩露。隨著程式的執行,程式所佔記憶體越來越多,知道系統奔潰或者程式結束。

1、free函式:

原型:void free(void *ptr);

功能:釋放malloc(或calloc、realloc)函式給指標變數分配的動態記憶體;

標頭檔案:malloc.h或stdlib.h;

2、為了避免釋放已經釋放了記憶體的指標記憶體,或沒有釋放記憶體,在c語言中最好是在定義指標時賦初值null,釋放後立即賦null,釋放時檢查指標值再決定釋放就避免釋放錯誤了,例如:

int *a = null

int *b = (int*) malloc(sizeof(int) * 10);

a= b;

/* 執行大量操作後 */

if(a != null)

if(b != null)

3樓:

正如 楊小丟summer 所說 你已經改變了指標的指向 再想free原來申請的空間已經不可能了

4樓:巴黎是小沫

程式結束的時候作業系統會幫你把申請的儲存空間free了的....你貼一下問題吧,可能問題不是你說的地方吧我想

c語言程式設計時使用malloc後未用free函式釋放記憶體空間怎麼辦

5樓:

記憶體會被一直佔著,直到程式結束,不會自動釋放

就現在的作業系統而言,記憶體加虛擬記憶體的容量應該是夠一般的申請,所以對於小的程式而言,一般很少出現記憶體被耗盡的情況

6樓:匿名使用者

是,記憶體會被一直佔著,而且釋放後那個指標就找不到了,這就造成了記憶體洩露,只有關閉程式才能釋放記憶體

7樓:匿名使用者

釋放的方法是有的,畢竟作業系統有mmc,當作業系統方便的時候~~它會釋放任何一塊記憶體~~如果他想~~

8樓:匿名使用者

程式結束後,分配給該程序的記憶體會隨之釋放。

9樓:兜裡有兩塊糖

如果不用free釋放的話,所佔的空間不會釋放。

記憶體一定被佔著,程式結束也不會自己釋放。

10樓:一口沒水的枯井

1 malloc後的記憶體除了等到free來釋放,還可以等到程式執行結束時自動釋放

2 程式執行過程中,如果一直malloc記憶體而不釋放會導致這部分記憶體不能被再次使用,即記憶體洩露。這樣以來,應用程式會逐漸用光所有可用的記憶體,最終導致應用程式因記憶體不足而崩潰停止。

3 所以一個好的習慣是,malloc後一定要記得free之。

11樓:匿名使用者

程序結束後會自動釋放.

示例#include /* for _max_path definition */

#include

#include

void main( void )}

12樓:呼濤仁淑

如果不適用free釋放記憶體,會造成記憶體洩露。隨著程式的執行,程式所佔記憶體越來越多,知道系統奔潰或者程式結束。

1、free函式:

原型:void

free(void

*ptr);

功能:釋放malloc(或calloc、realloc)函式給指標變數分配的動態記憶體;

標頭檔案:malloc.h或stdlib.h;

2、為了避免釋放已經釋放了記憶體的指標記憶體,或沒有釋放記憶體,在c語言中最好是在定義指標時賦初值null,釋放後立即賦null,釋放時檢查指標值再決定釋放就避免釋放錯誤了,例如:

int*a

=null

int*b

=(int*)

malloc(sizeof(int)

*10);

a=b;

/*執行大量操作後

*/if(a

!=null)

if(b

!=null)

13樓:匿名使用者

這要看你用malloc申請的空間是給哪一種變數的,一般的區域性變數在該變數所在函式執行完時就會釋放,但是全域性變數或是靜態區域性變數則會在整個程式結束時才能被釋放(如果沒有用free函式的話)。

但是現在的電腦配置釋放不釋放沒有多大區別(至少對於一般的小程式是這樣)。只是不釋放的話,顯得你的程式設計風格不怎麼好,而且佔用系統資源。

14樓:

自己不釋放的話就等著結束程序吧

15樓:匿名使用者

不用手工釋放

他會自動放的~~

c語言中使用malloc函式開闢了空間,但是我不使用free函式釋放會怎麼樣,開闢的空間會自動釋放掉嗎?

16樓:匿名使用者

不會釋放的。這樣會造成記憶體洩露。

具體危害詳見

c語言中使用malloc分配記憶體後沒有**,有辦法解決麼?

17樓:匿名使用者

7.5 free 和 delete 把指標怎麼啦?

別看 free 和 delete 的名字惡狠狠的(尤其是 delete) ,它們只是把指標所指的記憶體給

釋放掉,但並沒有把指標本身幹掉。

用偵錯程式跟蹤示例 7-5,發現指標 p 被 free 以後其地址仍然不變(非 null) ,只是

該地址對應的記憶體是垃圾,p 成了「野指標」 。如果此時不把 p 設定為 null,會讓人誤

以為 p 是個合法的指標。

如果程式比較長,我們有時記不住 p 所指的記憶體是否已經被釋放,在繼續使用 p 之

前,通常會用語句 if (p != null)進行防錯處理。很遺憾,此時 if 語句起不到防錯作用,

因為即便 p 不是 null 指標,它也不指向合法的記憶體塊。

char *p = (char *) malloc(100);

strcpy(p, 「hello」);

free(p); // p 所指的記憶體被釋放,但是 p 所指的地址仍然不變

… if(p != null) // 沒有起到防錯作用

示例 7-5 p 成為野指標

7.6 動態記憶體會被自動釋放嗎?

7.7 杜絕「野指標」

7.8 有了 malloc/free 為什麼還要 new/delete ?

7.9 記憶體耗盡怎麼辦?

7.10 malloc/free 的使用要點

7.11 new/delete 的使用要點

7.12 一些心得體會

參考文獻:

高質量 c++/c 程式設計指南 - 林銳 2001

18樓:記住一座城

養成好習慣,在堆上分配的記憶體不用的時候要記得釋放,不然它們佔據的空間會越來越大,

另外,儲存好指標的值,否則可能永遠都釋放不了了。

當你用free釋放一片記憶體之後,作業系統可能不會真正的收回,當你下一次用malloc分配記憶體的時候如果大小剛好,它會把你剛釋放掉的記憶體分配給你。

當程式結束後,作業系統會**所有程式所佔用的記憶體空間,包括堆,資料段,**段等。

19樓:匿名使用者

malloc()分配後,當不再用到的時候記得用free()去釋放記憶體,否則會一直佔用記憶體,導致記憶體洩露,最後記憶體越來越少。重啟機器後記憶體會釋放。

20樓:

程式結束 自己沒. 用不著怕

除非你一直開著那個申請記憶體的程式.

不然等你關了程式, 系統會自動**他所申請的資源

21樓:匿名使用者

不用管 程式執行結束,作業系統會自動**提供給該程式的資源,

但是有些程式可能會一直執行下去,因此要求不要忘記用free釋放記憶體

C語言char和malloc的使用

char 是一個copy指向char 的指標,char 是指向char的指標。在函式中如果要對一個引數char 申請空間,同時要在函式外面使用時 需要傳遞char 否則申請的空間無法在函式外面使用,但申請的空間仍會在,造成空間洩露。申請空間可以用malloc向系統申請分配指定size個位元組的記憶體...

C語言程式設計,求助大佬,謝謝,C語言程式設計題讀取時間求助,謝大佬了

include include include int main void else output length 0 printf s n output free input free output return 0 c語言程式設計題讀取時間求助,謝大佬了 字元轉整形抄的簡單應 bai用du 使用到...

C語言程式設計,c語言程式設計。

判斷 字串 s是否和 相等 strcmp s,表示s字元陣列是否是等於號加上字串結束符,其實單單比較是否為等於號 改為 c語言程式設計 int mian 應該是int main 你要輸入一個數才行,建議你加一個提示輸入的語句 c語言程式設計。else 非字母 switch read buf brea...