strcpy с размером больше, чем malloc

Это был вопрос из экзамена:
этот код всегда работает?
ответ таков: оператор if проверяет, указывает ли виртуальный адрес 'str' на начало страницы, только тогда должен выполняться strcpy, и он будет работать, потому что вся страница доступна этому процессу.
Кто-нибудь может объяснить мне этот неоднозначный ответ? большое спасибо

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;
}

person Rawhi    schedule 30.06.2015    source источник


Ответы (1)


Что касается стандарта C: это не работает, поведение undefined.

Что касается практической реальности: это не работает. Реальные реализации malloc() могут размещать и помещают более одного объекта на страницу. Хотя ОС не обнаружит никаких ошибок, вы перезапишете другие выделенные объекты и внутренние структуры malloc().

person user12864    schedule 30.06.2015
comment
Но что на самом деле проверяет условие if? - person Rawhi; 30.06.2015