下列,例程式:
#
include
int main(
int argc,
char
** argv)
段錯誤的,兩行,是因為指標變數p,是野指標。
(就是說 p 的記憶體空間內沒有 位址值 ,所以系統不知道 *p 指向的是**。)
① char
* p ;
p =
'\0'
; char * p;
定義了乙個指標變數。
(系統為 p 分配了乙個位址(例:0xaaaa);該位址空間內的值,應該也是個位址(暫時是null或不知道是啥)。)
(「不知道是啥」也就是定義了個 int i;不給i值,直接列印 i, 那列印結果指不定是啥,i 下的整形資料隨機;用"隨機"也不准,其實就是系統給i分配的位址下存放的值,趕巧是啥就是啥)
p = '
\0 '; '
\0',系統在記憶體的資料區,放了乙個'
\0'。 將
資料區的這個'\0
'的位址,賦值給 p, 也就是存放在0xaaaa的記憶體空間下。
所以 *p 就指向,
資料區的這個'\0
'。 ②p =
"abcdefg"
;p =&(
"abcdefg"
[5])
; 和①一樣。
就是把 字串的首位址,放到p的記憶體空間下;把字串的第6個元素的首位址放到p的記憶體空間下。
如果printf("%s\n",p);的話列印結果分別是: abcdefg 和 fg 。
"abcdefg" [5] 的寫法 和 『char str="abcdefg";str[5];』的寫法乙個意思。 ③
*p =
"abcdefg"
[5];
//segament fault //段錯誤
*p =
"abcdefg"
;//segament fault //段錯誤
含義是 對 *p 指向的那段記憶體空間賦值。
但是*p 指向**呢? p的記憶體空間下也沒有存放明確位址值呀?
系統不知道該指向**,所以
//segament fault //段錯誤
。
指標 段錯誤 segament fault
列,例程式 include int main int argc,char argv 段錯誤的,兩行,是因為指標變數p,是野指標。就是說 p 的記憶體空間內沒有 位址值 所以系統不知道 p 指向的是 p p 0 char p 定義了乙個指標變數。系統為 p 分配了乙個位址 例 0xaaaa 該位址空間...
ERROR C 字元指標引起的段錯誤
問題 程式編譯通過,執行異常終止。進入除錯模式,報段錯誤。分析 逐行除錯,在為char指標所指內容修改時出錯。原因 char c abc 此時,無法根據指標來修改字串內容。example 1 char str 12 hello 字串用陣列開闢的,它是可以改變的變數。char p str p h 改變...
段錯誤?打的就是段錯誤!!
呵,段錯誤?自從我看了這篇文章,我還會怕你個小小段錯誤?請開啟你的linux終端,跟緊咯,準備發車!嘟嘟嘟噠 include void errfunc intmain 這段 拿去執行,肯定段錯誤。系統會在程式崩潰的那一剎那將整個核心的資訊記錄在乙個檔案裡邊。如果你是第一次,那麼ls是查不到的。這樣 ...