大小比malloc大的strcpy

时间:2015-06-30 20:37:50

标签: malloc strcpy virtual-address-space

这是考试中的问题:
这段代码总是有效吗?
答案是: 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 个答案:

答案 0 :(得分:0)

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

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