2015-06-30 45 views
0

這更大的是從考試的一個問題:
這段代碼總是工作?
的答案是: 的if語句檢查「STR」的虛擬地址指向一個頁面的開始,才把的strcpy應該被執行,它會工作,因爲整個頁面是此進程訪問。
任何人都可以請解釋我這個模棱兩可的答案?非常感謝你strcpy的大小大於的malloc

int main() { 
    char *str ; 
    str = (char*) malloc (sizeof(char)*4); 
    if (((int)str) & 0x00000FFF) != 0) return 0; 
    strcpy (str ,"1234567890") ; 
    printf ("str=%s", str) ; 
    return 0; 
} 

回答

0

至於C標準去:這不起作用,未定義的行爲。

至於實際的現實所說:這是行不通的。真正的malloc()實現可以並且每頁都放置多個對象。儘管操作系統不會出現任何錯誤,但您將覆蓋其他分配的對象和malloc()內部結構。

+0

但if條件實際檢查的是什麼? – Rawhi