这是考试中的问题:
这段代码总是有效吗?
答案是:
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;
}
答案 0 :(得分:0)
就C标准而言:这不起作用,未定义的行为。
就实际情况而言:这不起作用。真正的malloc()实现可以并且确实在每页上放置多个对象。虽然操作系统不会捕获任何错误,但您将覆盖其他已分配的对象和malloc()内部结构。