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;
}
1 ответ
Что касается стандарта C: это не работает, неопределенное поведение.
Насколько практическая реальность идет: это не работает. Реальные реализации malloc() могут и действительно помещать более одного объекта на страницу. Хотя ОС не будет обнаруживать никаких ошибок, вы перезапишете другие выделенные объекты и внутренние структуры malloc().