[語法] *(int *)0 = 0;

看板C_and_CPP (C/C++)作者 (Shizuru)時間17年前 (2009/04/13 15:56), 編輯推噓13(13015)
留言28則, 8人參與, 最新討論串1/2 (看更多)
如同標題:*(int *)0(數字0) = 0(數字0) 這個語法是我在看驅動程式中一個範例看到的 寫出這行程式,他的意思是說提取一個NULL指標所造成的錯誤 但是我比較有疑問的是lvalue那段 *(int *)0這句是什麼意思 一般取成變數的話,如:*(int *)var; 這樣是將var這個位址的值取出不是嗎? 但是寫成0表示什麼意義?不是variable又要如何assign值給它? 請各位先進指點一下,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.74.245.163

04/13 16:04, , 1F
這不是會造成錯誤嘛? 把0x0000的位置取值填上0這不是不合法嘛
04/13 16:04, 1F

04/13 16:08, , 2F
看成 *( (int *)ptr ) = 0; 會不會比較容易懂 ?
04/13 16:08, 2F

04/13 16:10, , 3F
按照ledia大的意思,不就是將ptr給0?
04/13 16:10, 3F

04/13 16:10, , 4F
也就是NULL值
04/13 16:10, 4F

04/13 16:11, , 5F
但是想請問,為什麼不給變數,給0會過呢?
04/13 16:11, 5F

04/13 16:11, , 6F
不是耶 他是讓一個指標指到 0這個位置 再對他取值
04/13 16:11, 6F

04/13 16:12, , 7F
Q大,這個我在上面提到了「提取一個NULL指標造成的錯」
04/13 16:12, 7F

04/13 16:13, , 8F
對,我看錯了,是這樣沒錯
04/13 16:13, 8F

04/13 16:13, , 9F
我比較好奇這是一個錯誤 有什麼特別涵義嘛 或是應用
04/13 16:13, 9F

04/13 16:13, , 10F
沒這方面的接觸 @@
04/13 16:13, 10F

04/13 16:14, , 11F
它只是一個用來表示提取NULL指標所造成的錯誤而已
04/13 16:14, 11F

04/13 16:14, , 12F
沒有特別的意含,只是我對那個變數寫0覺得怪怪的
04/13 16:14, 12F

04/13 16:28, , 13F
我忘了為啥這樣寫,但這樣寫裡有用處
04/13 16:28, 13F

04/13 16:28, , 14F
如果有用處 但這樣不是會觸發錯誤嘛 還是有別的方式避免錯誤
04/13 16:28, 14F

04/13 16:47, , 15F
只是刻意設計一個對NULL位置做存取的動作說明錯誤吧??
04/13 16:47, 15F

04/13 16:49, , 16F
其實也可以有 *(int *)0x12345678 = 0; 沒有一定要變數
04/13 16:49, 16F

04/13 16:52, , 17F
怎麼知道 哪些位置是合法 可以改動的呢???
04/13 16:52, 17F

04/13 16:55, , 18F
一般來說, 我也不知道, 我想 driver 應該有其 mapping 吧
04/13 16:55, 18F

04/13 17:13, , 19F
恩~看來我想錯了
04/13 17:13, 19F

04/13 17:31, , 20F
嗯...那暫時只能這樣認為了,謝謝ledia大
04/13 17:31, 20F

04/13 18:00, , 21F
怎麼知道哪些合法?? 基本上除了你自己定義或malloc或
04/13 18:00, 21F

04/13 18:00, , 22F
new出來等的變數所佔用的位置區段外, 都是不合法的....
04/13 18:00, 22F

04/13 18:01, , 23F
也許那些address你可以讀寫不發生error, 但是沒有人曉得
04/13 18:01, 23F

04/13 18:01, , 24F
隨意讀/寫一個未知的address會發生什麼問題....@_@"
04/13 18:01, 24F

04/13 21:23, , 25F
mem map io會這樣寫 但是 通常 對 0 dereference應該會爆
04/13 21:23, 25F

04/13 23:52, , 26F
就是把 sizeof(int) 這麼大的區間都填 0 的意思。
04/13 23:52, 26F

04/14 00:14, , 27F
不就 mapping 而已 要知道 segment or selector 才算吧
04/14 00:14, 27F

04/14 09:12, , 28F
樓上W大的意思不太明瞭,可否細說?
04/14 09:12, 28F
文章代碼(AID): #19ul0LaK (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #19ul0LaK (C_and_CPP)