malloc,calloc,realloc,free的作用以及區別

首先c語言開闢動態內存有三個函數,分別爲malloc(),callloc(),realloc()。而釋放內存只有free().

在日常編碼中,我們使用malloc最頻繁,因爲它最簡單,只需要一個參數,即需要動態開闢的內存字節數,如果堆裏的連續空間能滿足需要則將分配好的內存地址返回,否則將會返回空。

char*arr=(char*)malloc(20);

calloc只是在malloc的基礎上將分配好的每個字節賦值爲0,這功能使用並不是很常見,但是由於需要提供兩個參數,所有沒有malloc使用的多。

char*arr=(char*)calloc(20,sizeof(char));

realloc主要用於修改動態內存大小的場景,比如原始開闢100個字節的內存不夠用了,現在需要開闢200個字節,這種情況就要使用realloc.

free用於釋放內存,free需要注意的幾個點就是free可能引起程序崩潰,分爲以下四種情況:

1.越界

2.移動指針的指向,free時指針的指向不等於動態內存的開頭。

3.重複釋放同一段內存

4.釋放不是動態創建的內存

當我們想測試當前項目是否存在內存泄漏可以使用開源工具vld。下面是下載的鏈接,

http://vld.codeplex.com/

把vld.lib的文件放入lib中,把include文件中的vld.h和vld_def.h文件放入include中就配置完成了,然後在cpp文件中加入頭文件#include<vld.h>就可以使用了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章