2015-06-30 1 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