記憶體洩露與野指標的思考

2021-06-20 11:31:17 字數 2010 閱讀 4906

資料大小與指標大小?

int a=sizeof(char);//a的值為1.

int b=sizeof(char*);//b的值隨編譯器和作業系統改變。在win32系統,應該是4.32位定址---即4byte。

不應妄自揣度記憶體大小

struct mystruct;

//long takes 4byte

//int takes 2byte

mystruct * pstruct;

pstruct=(mystruct*)malloc(???);//由於記憶體對齊的影響,結構體型別的記憶體塊不能夠「目測」計算,特別是不能使用strcpy。這是絕對錯誤的。

記憶體洩露

void getbuffer(void)//malloc之後需要確保free。只分配一次記憶體的全域性物件不free的話,按道理是影響不大的,程序在結束的時候會清理這些記憶體。未曾嘗試。請勿模仿
記憶體生命週期與變數生命週期比較

void getbuffer(void)

void printline(void)

void main()//此段**需要自己慢慢品味。

野指標

char *pstr=null;

pstr=(char*)malloc(sizeof(char)*1024);

//..

free(pstr);

if(pstr!=null)

//任何free記憶體塊的操作之後都應該接乙個指標置空操作。否則可能訪問野指標。

常見野指標

char *pstr=null;

pstr=(char*)malloc(sizeof(char)*1024);

//..

free(pstr);

pstr=null;//所有free都應該與之相隨

if(pstr!=null)

同理new與delete

phttppostget=null;//應該相隨相伴。最錯誤的**

void getbuf(char *pstr)

main()//兼具記憶體洩露與野指標。

和如下**段有何區別?

void funcb(char * p)

void main(int argc,char ** argv)

和如下**段有何區別?

void funca(char * p)

void main(int argc,char ** argv){

char * mypoint=null;

mypoint=(char*)malloc(sizeof(char)*1024);

if(mypoint!=null)

funca(mypoint);

pirntf("func a is %s",mypoint);

為何有malloc free還要有new delete?

c語言記憶體管理參考書

C 記憶體洩露 與 野指標總結

跟前輩交流收穫心德,使用非常精煉的形式描述記憶體洩露與野指標的本質。在此與大家分享,歡迎多多交流。下面給出理解描述 指標變數作用域 被指向物件生命週期 造成的結果 情況一 超出作用域 生命週期未結束 記憶體洩露 情況二 在作用域內 生命週期結束 野指標 情況三 超出作用域 生命週期結束 正確的執行 ...

C 記憶體洩露之野指標

寫出本文僅僅是處於備忘的目的。最近為現在做的軟體新增了乙個記憶體 機制 以前處於某種記憶體只申請不釋放,這並不等於記憶體洩露,因為我們知道這些記憶體塊在記憶體中的位置 在某一塊記憶體不使用的時候將其釋放掉,以防止記憶體緩慢增長。由於以前沒有釋放記憶體,所以就不存在野指標的問題。於是乎肯定坑爹的事情就...

記憶體洩漏與野指標

當你要為變數a申請一塊記憶體空間的時候,需要用到malloc函式。如何申請這塊記憶體空間呢?這就變成程式的工作了。程式首先會向系統申請一塊記憶體空間,然後程式會把申請好的這塊記憶體空間的首位址賦給變數a,假設這時候變數a拿到的首位址為0x1234,如果我們現在要對變數a進行迴圈操作,那麼每迴圈一次,...