【发布时间】:2012-04-15 18:23:27
【问题描述】:
我在一次采访中遇到了这段代码。
int main()
{
int **p;
p = (int **) new int(7);
cout<<*p;
return 0;
}
我预计 *p 会出现一些运行时错误。但是当我运行代码时,它成功执行并输出“0x7”。有人可以解释一下这是如何工作的。谢谢。
【问题讨论】:
-
你想做什么?一个基本的经验法则是,如果你必须施放,那你就做错了。由于
new int(7)返回int*,因此您需要进行转换。但是强制转换并不能使代码正确。它只是你弄错了事实的文件。移除演员表并从那里开始工作。 -
@David:代码可能来自采访,而不是来自 OP。
-
@David Heffernan:这是笔试中的面试题。有四个选项 compile time error , run time error , code will run fine ,以上都不是。甚至我都不明白他们试图通过这样的面试问题来衡量什么样的知识。
-
是的,所以正确的答案应该是“依赖于实现”。例如,在指针与 int 大小不同的平台上,这将严重失败。
-
@Mr Lister:很可能,即使 sizeof (int) != sizeof(pointer) 也不会失败。它只会覆盖一些内存,但是这不会使程序崩溃的可能性很高。