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語言基礎-指標C語言指標
- C語言 函式指標C語言函式指標
- C語言:指標,C的靈魂C語言指標
- C語言知識彙總 | 51-C語言字串指標(指向字串的指標)C語言字串指標
- 搞清楚C語言指標C語言指標
- C語言 指標與陣列C語言指標陣列
- C語言指標基本知識C語言指標
- C語言指標詳解(一)C語言指標
- C語言指標詳解(二)C語言指標
- C語言指標用法大全C語言指標
- c語言實現this指標效果C語言指標
- C語言指標細節_1C語言指標
- 指標——C語言的靈魂指標C語言
- C語言基礎-1、指標C語言指標
- C語言指標(二) 指標變數 ----by xhxhC語言指標變數
- C語言知識彙總 | 56-C語言NULL空指標以及void指標C語言Null指標
- c語言野指標與結構體指標動態記憶體分配小解C語言指標結構體記憶體
- C語言指標常見問題C語言指標
- c語言-運算子,陣列,指標C語言陣列指標
- Swift中使用C語言的指標SwiftC語言指標
- C語言函式指標基礎C語言函式指標
- 走下“神壇”的C語言指標C語言指標
- C語言指標5分鐘教程C語言指標
- C 語言指標 5 分鐘教程指標
- C語言指標安全及指標使用問題C語言指標
- C語言指標(三):陣列指標和字串指標C語言指標陣列字串
- c 語言指標操作經典問題指標
- C語言學習之:指標與字串C語言指標字串
- C語言_瞭解下結構體指標C語言結構體指標
- C語言指標部分教學總結C語言指標
- C語言指標和陣列基礎C語言指標陣列