大小大于malloc的strcpy



这是一道考试题:
这个代码总是有效的吗?
答案是: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;
}

就C标准而言:这是不起作用的,未定义的行为。

就实际情况而言:这是行不通的。真正的malloc()实现可以而且确实在每页上放置多个对象。虽然操作系统不会捕捉到任何错误,但您将覆盖其他分配的对象和malloc()内部结构。

相关内容

  • 没有找到相关文章

最新更新