C語言 C語言野指標
關於野指標也就是進行了記憶體free後,其指標變數指向的記憶體空間已經free掉了,但是指標變數其值並沒有釋放,可能造成
二次釋放的導致程式崩潰。
考慮如下的程式
我們有必要畫出他的記憶體四區圖如下:
實際上free(p)的時候,只是free了指標p指向的堆疊的記憶體空間,而指標p的
變數0X25C1010這個值還在,如下:
記住指標p也是需要在棧上開闢空間的,實際上
我們只需要在free(p)後將p=NULL,將指標的值賦予0,那麼下次釋放的時候加
上p!=NULL即可,我們可以定義一個巨集:
#define xfree(p) {if(p!=NULL);{free(p);p=NULL;}}
來完成所有的操作如下:
二次釋放的導致程式崩潰。
考慮如下的程式
點選(此處)摺疊或開啟
-
#include<stdio.h>
-
#include<stdlib.h>
-
#include<string.h>
-
-
#define xfree(p) {if(p!=NULL);{free(p);p=NULL;}}
-
-
-
-
int getstr( char **p/*out*/,int *len/*out*/)
-
{
-
*p = (char *)malloc(4094);
-
strcpy(*p,"testesest");
-
*len = strlen(*p);
-
-
return 0;
-
}
-
-
-
-
-
int main()
-
{
-
char *p = NULL;
-
int len = 0;
-
-
getstr(&p,&len);
-
-
printf("%s %d\n",p,len);
-
-
if(p!=NULL)
-
{
-
free(p); //釋放指標p指向的記憶體空間,但是指標變數本身的值還存在
-
printf("%p\n",p);//列印出來
-
}
-
-
if(p!=NULL) //條件還是成立因為p變數本身沒有改變
-
{
-
free(p);//記憶體不存在了,再次釋放程式崩潰
-
}
- }
實際上free(p)的時候,只是free了指標p指向的堆疊的記憶體空間,而指標p的
變數0X25C1010這個值還在,如下:
記住指標p也是需要在棧上開闢空間的,實際上
我們只需要在free(p)後將p=NULL,將指標的值賦予0,那麼下次釋放的時候加
上p!=NULL即可,我們可以定義一個巨集:
#define xfree(p) {if(p!=NULL);{free(p);p=NULL;}}
來完成所有的操作如下:
點選(此處)摺疊或開啟
-
#include<stdio.h>
-
#include<stdlib.h>
-
#include<string.h>
-
-
#define xfree(p) {if(p!=NULL);{free(p);p=NULL;}}
-
-
-
-
int getstr( char **p/*out*/,int *len/*out*/)
-
{
-
*p = (char *)malloc(4094);
-
strcpy(*p,"testesest");
-
*len = strlen(*p);
-
-
return 0;
-
}
-
-
-
-
-
int main()
-
{
-
char *p = NULL;
-
int len = 0;
-
-
getstr(&p,&len);
-
-
printf("%s %d\n",p,len);
-
xfree(p); //使用巨集
-
xfree(p);
-
- }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-2131193/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C語言指標C語言指標
- c語言指標彙總C語言指標
- C語言指標用法大全C語言指標
- C語言 函式指標C語言函式指標
- C語言指標筆記C語言指標筆記
- C語言基礎-指標C語言指標
- C語言指標學習C語言指標
- C語言知識彙總 | 51-C語言字串指標(指向字串的指標)C語言字串指標
- C語言知識彙總 | 56-C語言NULL空指標以及void指標C語言Null指標
- C語言指標詳解(一)C語言指標
- C語言指標詳解(二)C語言指標
- C語言 指標與陣列C語言指標陣列
- C語言基礎-1、指標C語言指標
- c語言實現this指標效果C語言指標
- 搞清楚C語言指標C語言指標
- C語言指標基本知識C語言指標
- C語言指標(二) 指標變數 ----by xhxhC語言指標變數
- c語言野指標與結構體指標動態記憶體分配小解C語言指標結構體記憶體
- c語言-運算子,陣列,指標C語言陣列指標
- C語言指標常見問題C語言指標
- C語言指標(三):陣列指標和字串指標C語言指標陣列字串
- c語言函式指標的定義C語言函式指標
- C語言指標應用程式設計C語言指標程式設計
- C語言學習之:指標與字串C語言指標字串
- c 語言指標操作經典問題指標
- 標準C語言1C語言
- 標準C語言2C語言
- 標準C語言4C語言
- 標準C語言5C語言
- 標準c語言03C語言
- C語言指標和陣列筆試題C語言指標陣列筆試
- C語言C語言
- 聊聊C語言/C++—程式和程式語言C語言C++
- C語言指標總結大學霸IT達人C語言指標
- 如何掌握 C 語言的一大利器——指標?指標
- (C語言)使用指標列印陣列的內容C語言指標陣列
- C語言語法基礎--S2函式和指標C語言函式指標
- C\C++語言重點——指標篇 | 為什麼指標被譽為 C 語言靈魂?(一文讓你完全搞懂指標)C++指標
- C語言 - 標頭檔案包含C語言