这是一道考试题:
这个代码总是有效的吗?
答案是: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()内部结构。