位圖排序程序,其中,所述分配部分是:c輸入,如果塊時條件爲假一個
for(i = MAX/64-1;i >= 0;i--){
for(j = 0;j < 64;j++){
if(0 != (arr[i] & (1 << j))){
*p++ = j + 64 * i;
}
}
}
我gdb的話,有時當if條件返回0並且程序仍然輸入塊並執行該語句:
*p++ = j + 64 *i;
這最後導致segmentfault,我只是不明白,根據該情況會成爲現實
例如:
這樣當GDB狀態:
J = 44,I = 6250,ARR [I] = 4096和print (arr[i] & (1 << j))
給出0
但程序仍進入塊
你能解釋一下p點嗎? – MarsRover
你的數組'arr []'的數據類型是什麼? 'int64_t'? –
一。你正在使用'&',你可能不應該這樣做。二。我假設'j'是一個'int' - 也就是說,它只有64位長。由於它是一個int類型,所以'1'字面值也會被視爲一個int值,它會溢出(通常在第31位之後)。 – 2012-09-21 11:44:45