C語言堆記憶體管理上出現的問題,記憶體泄露,野指標使用,非法釋放指標,記憶體管理指標

來源:互聯網
上載者:User

C語言堆記憶體管理上出現的問題,記憶體泄露,野指標使用,非法釋放指標,記憶體管理指標

C語言堆記憶體管理上出現的問題,記憶體泄露,野指標使用,非法釋放指標


(1)開闢的記憶體沒有釋放,造成記憶體泄露

(2)野指標被使用或釋放

(3)非法釋放指標


(1)開闢的記憶體沒有釋放,造成記憶體泄露,下面的例子就可能造成20個位元組的泄露,記憶體泄露不是一個立即會引發故障的錯誤,但是

它將消耗系統記憶體。

void function1(){char *pa;pa = (char*)malloc(sizeof(char)*20);if(NULL !=pa){strcpy(pa,”hello”);printf(“pa = %x\n”,(unsigned int)pa);printf(“pa = %s\s”,pa);}return;}

(2)野指標被使用或釋放

野指標是一個已經被釋放的記憶體指標,他指向的位置已經被使用free或者realloc函數釋放了,但是該指標依然在使用。


void function2(){char *pa;pa = (char*)malloc(sizeof(char)*20);if(NULL !=pa){strcpy(pa,”hello”);printf(“pa = %x\n”,(unsigned int)pa);printf(“pa = %s\s”,pa);}free(pa);printf(“ pa = %s”,pa);return;}


正確的記憶體釋放應該是下面的


void function2(){char *pa;pa = (char*)malloc(sizeof(char)*20);if(NULL !=pa){strcpy(pa,”hello”);printf(“pa = %x\n”,(unsigned int)pa);printf(“pa = %s\s”,pa);}free(pa);pa = NULL;if(NULL != pa){printf(“pa = %s\n”,(unsigned int)pa);}return;}

(3)非法釋放指標


void function3(){char a[20];int b;free(a);free(&b);return;}

上面的程式中,a[20]是一個棧上的數組,a是這塊記憶體的地址;b是棧上面的一個變數,&b是它的地址。這些棧上的記憶體,編譯器

將自動管理和回收資源,程式中使用free將他們釋放,是一種錯誤的寫法。

char *pa;pa = (char*)malloc(sizeof(char)*20);free(pa);free(pa);

上面的一段程式,將記憶體釋放兩次是錯誤的寫法,因為第一次釋放後,該地址已經變成,未分配的堆記憶體,free函數不能釋放未分配的堆記憶體。


char *pa;char *pa;pa = (char*)malloc(sizeof(char)*20);pb = pa++;free(pb);

在上面的程式中,雖然pa是一個被分配出的堆記憶體指標,pb作為pa的地址加1,也是一個堆記憶體的指標,而且這個指標所指向的也是已經分配的記憶體。然而記憶體pb依然是非法的記憶體釋放。這是由於這個指標並不是從malloc分配出來的,而是中間的一個指標值。




C語言指標問題--填空題 問:為何會發生記憶體泄露?

因為test函數中定義的str變數,並且在裡面申請了空間,但是當函數結束時,str也就結束了,所以無法釋放申請了的空間,自然泄露了!~
 
C++記憶體泄露,野指標含義

給個例子你就知道了
char* p1 = new char[10];
char*p2 = p1;
這時候 你釋放了p1
delete[] p1;
p1=NULL
但這時候p2還是不為NULL,它指向了一個已經被你釋放掉的記憶體,這就成了野指標了
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.