程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言指針的易錯點,C語言指針易錯

C語言指針的易錯點,C語言指針易錯

編輯:關於C語言

C語言指針的易錯點,C語言指針易錯


1.內存洩漏:申請的堆內存沒有釋放。

2.內存污染:前面非法操作使用內存(沒有報錯),後面寫著寫著就出錯。如下代碼:

當結構體中只有劃線部分代碼時,在編譯器中編寫不會報錯,但此時已經造成非法操作內存,下面再給結構體添加一些變量,此時就會報錯,不讓再定義變量(這種錯誤特別不好調試)需要注意。

3.對空字符串和非法字符串的判斷:

圖中畫藍線的部分:應該判斷的是指針變量的值,而不是指針指向的內存

4.指針越界:如:str[3] = "abc";

5.指針的疊加會不斷改變指針的指向。

如:char *p ="sdfg";   p++;  printf("%s\n",p);打印結果為:"dfg";。指針的只想被改變,如果再疊加4次,就打印不出內容了,因為指針此時已經指向了結束符。

6.棧區局部變量的地址不要往外傳。如:

char *get_str()
{
	char str[] = "abcdedsgads"; //棧區,
	printf("[get_str]str = %s\n", str);
	return str;
}

7.同一塊內存區域被多次釋放;如

har *p = NULL;

p = (char *)malloc(50);
strcpy(p, "abcdef");

if (p != NULL)
{
	//free()函數的功能只是告訴系統 p 指向的內存可以回收了
	// 就是說,p 指向的內存使用權交還給系統
	//但是,p的值還是原來的值(野指針),p還是指向原來的內存
	free(p);
}

if (p != NULL)
{
	free(p);
}

  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved