显式地将ptr转换为"ptr to a ptr"

For*_*ner 7 c++ pointers casting

我在接受采访时遇到了这段代码.

int main()
{
    int **p;
    p = (int **) new int(7);
    cout<<*p; 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我期待*p有一些运行时错误.但是当我运行代码时,它成功执行输出"0x7".有人可以解释一下这是如何工作的.谢谢.

Dav*_*eas 5

除非给予一些额外的限制,否则正确答案将是以上都不是.基本上代码是分配int和解释该内存,就好像它是一个int*(通过a reinterpret_cast).第一个问题是,作为a reinterpret_cast,结果在一般情况下是未指定的,并且如果大小int小于int*(认为​​64位体系结构)的大小,结果是未定义的行为,因为您正在读取超出分配的大小new呼叫.