一級指標 char 易錯模型分析

2021-09-28 19:05:23 字數 759 閱讀 4320

(1) char *(字串)做函式引數出錯模型分析

比如**如下:

void copy_str21(char *from, char *to)

for (; *from!='\0'; from++, to++)

*to = '\0';

}//字串逆序

int main()

; char *p =; p = null;

char to[100];

copy_str21(p, to);

}

注意,如果傳給from指標的是null, 那麼在使用*from的時候就會出錯,因為,需要先判斷from是不是null. 總之,不要相信主調函式給你傳的記憶體空間。

(2) 越級 (語法級別的越界)

舉個例子,比如:

char buf[3] = "abc";  //定義成buf[4]才對,因為這是字串初始化字元陣列,預設加』\0』(c風格的字串)

(3) 不斷修改指標變數的值

這個free(a)會出現問題,因為a已經不是指向這塊記憶體區域的首地了,很多時候,這是產生bug的根源

(4)  c語言中棧中分配的記憶體

注意, c語言中,棧中可以分配記憶體,但是在棧中分配的記憶體,一離開其作用區域,就會被釋放了,特別要注意這一點,比如說要在棧中分配陣列記憶體的地方,一定要格外小心。

一級指標二級指標

例如 int p null int代表指標p指向的資料型別是int型,代表這是乙個指標變數,1 指標變數儲存的內容是指向的變數的位址 2 在使用sizeof判斷指標的位元組數時,在32位機器上為4個位元組,在64位機器上為了相容,仍然是四個位元組大小 3 小知識點,不同型別的指標除了指向的變數資料型...

一級指標陣列

示例1 include intmain void 定義了乙個長度為5的物理空間陣列 每個長度為1的空間都有自己獨有的實體地址十六進製制 a 3 3 a printf p n a 1 此時輸出的為 實體地址 即a 2 printf p n a 2 printf d n a 3 a 3等價於 a 0 3...

一級指標與二級指標

如下圖所示,整型指標xptr指向變數x的位址。原始碼 include int main 實現方法一如下圖所示,先為二級整型指標ptr分配空間,然後賦值。原始碼 include include int main printf n return 0 執行結果 實現方法二 如下圖所示,先為二級整型指標pt...