野指標和記憶體操作分析

2021-06-16 20:00:58 字數 2058 閱讀 2569

初始也指標

野指標通常是因為指標變數中儲存餓值不是乙個合法的記憶體位址而造成的

2.棧空間上的區域性變數所占用的空間

野指標不是null指標,是指不可用記憶體的指標

null指標不容易出錯,因為if語句很好判斷乙個指標是不是null

c語言沒有任何手段可以判斷乙個指標收費為野指標!

野指標的由來

1.區域性指標沒有被初始化

struct student

;int main()

2.使用已經釋放過後的指標

void func(char* p)

int main()

3.指標所指向的變數在指標之前被銷毀

char* func()

//呼叫結束後回被釋放

int main()

經典錯誤:

非法記憶體操作分析

1.結構體成員指標未初始化

2.沒有為結構體指標分配足夠的記憶體

struct demo

;int main()

d2.p = (int*)calloc(5, sizeof(int));    

for(i=0; i<10; i++)

free(d2.p);    

return 0;

}記憶體初始化分析

記憶體分配成功,但並未初始化

int main()

記憶體越界分析

陣列越界

void f(int a[10])

}int main()

記憶體洩露分析

void f(unsigned int size)

for(i=0; i設計函式的時候,最好單入口單出口

多次指標釋放

void f(int* p, int size)

//習慣:誰申請誰釋放,main裡面申請的就在main裡面釋放

使用已釋放的指標

void f(int* p, int size)

return 0;

}c語言中的交通規則

1.用malloc申請了記憶體之後,應該立即檢查指標值是否為null,防止使用值為null的指標

int* p = (int*)malloc(5 * sizeof(int));

if(p != null)  //必須驗證記憶體是否分配成功,因為malloc申請有不成功的可能

//do something here

free(p);

2.牢記陣列的長度,防止陣列越界操作,考慮使用柔性陣列

typedef struct _soft_array

softarray;

int i = 0;

softarray* sa = (softarry*)malloc(sizeof(softarray) + sizeof(int) * 10);

sa->len = 10;

for(i=0; ilen; i++)

sa->array[i] = i + 1;

3.動態申請的操作必須和釋放操作匹配,防止記憶體洩露和多長釋放

void f()

int* p = (int*)malloc(5);

free(p);

int main()

int* p = (int*)malloc(10);

f();

free(p);

return 0;

4.習慣:free指標之後必須立即賦值為null

int* p = (int*)malloc(10);

free(p);

p = null;

if( p != null )

int i = 0;

for(i=0; i<5; i++)

記憶體操作 野指標

試題4 void getmemory char p void test void 試題5 char getmemory void void test void 試題6 void getmemory char p,int num void test void 試題7 void test void 解答...

第32節 野指標和記憶體操作分析

資源 於網路,僅供自學使用,如有侵權,聯絡我必刪.第一 初識野指標 野指標通常是因為指標變數中儲存的值不是乙個合法的記憶體位址而造成的 野指標不是null 指標 是指向不可用記憶體的指標 null 指標不容易用錯 因為if 語句很好判斷乙個指標是不是null c語言中沒有任何手段可以判斷乙個指標是否...

野指標和記憶體溢位

1.野指標 野指標是表示指標指向的記憶體空間被釋放了,導致這個指標指向了不能使用的空間,如果在訪問則會出錯,所以一般在釋放空間後給野指標賦值null 例 intmain intargc,const char argv 銷毀開闢的空間後,p指標指向了不可用的空間,此時p成為了野指標 2.記憶體溢位 記...