第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

關(guān)于C語言數(shù)組下標(biāo)問題怎么回事哈?。?/h1>

2 回答

?
SMILET

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊

越界了,undefinedbehavior。你這個(gè)代碼中,都是在棧上分配的,棧是高位往低位擴(kuò)張,一開始棧的布局是這樣的a9a8a7a6a5a4a3a2a1a0每次loop,會(huì)在低位申請然后又釋放i,棧的布局:a9a8a7a6a5a4a3a2a1a0i這種情況下arr[-1]就會(huì)一直輸出i
這里有個(gè)小問題,我在wsl上試著是4個(gè)字節(jié),而在mac是兩個(gè)字節(jié),但mac上的整型也是4個(gè)字節(jié),不知道為什么這兒就變成兩個(gè)字節(jié)了)
我猜你計(jì)算2和4是代碼里面輸出兩個(gè)地址相減的值的。你的wsl應(yīng)該是默認(rèn)編譯出32位的程序,直接減得到4沒問題。mac上編譯出來的是64位的,你直接減,然后輸出的時(shí)候應(yīng)該是溢出了,得到個(gè)2,你試試先把地址轉(zhuǎn)longlong,用%lld輸出試試,會(huì)得到一個(gè)8,而不是2或者4。這是因?yàn)榉峙淇臻g的時(shí)候還會(huì)做內(nèi)存對(duì)齊,分配i的時(shí)候會(huì)再跳過高位的4個(gè)字節(jié)再去分配i,保證i的地址也是8的倍數(shù),所以實(shí)際地址差是8,64位的程序堆結(jié)構(gòu)大概如下:0a8a7a6a5a4a3a2a1a00i
貼一個(gè)gdb的輸出
//code
inta[]={1,2,3,4,5,6,7,8,9};
inti=2;
//gdb
p&i
(int*)$1=0x00007ffeefbffdc8
x/11dw0x00007ffeefbffdc8
0x7ffeefbffdc8:2
0x7ffeefbffdcc:0
0x7ffeefbffdd0:1
0x7ffeefbffdd4:2
0x7ffeefbffdd8:3
0x7ffeefbffddc:4
0x7ffeefbffde0:5
0x7ffeefbffde4:6
0x7ffeefbffde8:7
0x7ffeefbffdec:8
0x7ffeefbffdf0:9
                            
查看完整回答
反對(duì) 回復(fù) 2019-10-16
?
莫回?zé)o

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊

下標(biāo)越界。
向后越界(比0還小)指向低位指針地址,向前越界(比數(shù)組長度還大)指向高位指針地址。如果指向的地址沒被使用,也就是個(gè)野地址,那么結(jié)果就是是隨機(jī)的,無意義。
這個(gè)代碼段里第一個(gè)arr[-1]指向什么還得看上下文,不同的上下文結(jié)果不一定都是32689;for循環(huán)里的arr[-1]指向i了。
這種黑魔法少用,基本沒有可讀性。
                            
查看完整回答
反對(duì) 回復(fù) 2019-10-16
  • 2 回答
  • 0 關(guān)注
  • 445 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)