为什么这个指针仍然可以在Visual Studio 2012专业版中使用?

时间:2015-02-20 11:15:37

标签: c++ pointers visual-studio-2012

这是我的代码

#include<iostream>

using namespace std;

int *f1(int x) {
    return &x;
}

void f2(int a, int b, int c){

    cout<<a<<endl;
}

int main() {

    cout<<"hari Hari"<<endl;

    int *x;
    x = f1(90);
    f2(3,45,2);

    cout<<*x<<endl;

    system("PAUSE");
}

现在当f1返回指向堆栈的指针,假设被f2覆盖,并且预期输出应该看起来像这样 &#34; 哈里哈里 3 3 &#34; 但实际上我得到正确答案,我的实际输出是, &#34; 哈里哈里 3 90 &#34; 我无法理解为什么它不会覆盖f1函数的价值&#39; x&#39;。

1 个答案:

答案 0 :(得分:3)

您依赖于未定义的行为,这意味着您无法以任何特定方式依赖行为。在你的情况下,你刚刚得到了#34;幸运&#34;。