悬挂指针与字符串和向量

时间:2014-01-26 11:42:45

标签: c++ string pointers

我知道悬空句柄是指向无效数据的指针或引用。我用字符串和向量进行实验,下面是我的字符串代码:

    char *p = NULL;
    {       
        string s;
        s.push_back('a');
        s.push_back('b');
        p = &s[0];
    } 
    cout << *p << endl;

,结果是'a'。它让我感到惊讶,不应该是一个悬垂的指针吗?我认为对象应该被破坏,为什么p仍然指向有效内容?
我在上面的代码中用“向量”替换“字符串”,然后用矢量做另一个实验,这次没有打印。那么这是什么意思?字符串和向量组织其成员有什么区别吗?

2 个答案:

答案 0 :(得分:2)

您正在调用未定义的行为,因此任何事情都可能发生。在你的情况下,恰好还没有覆盖内存。它也可能只是段错误,擦拭你的硬盘或唤醒鼻子恶魔。

答案 1 :(得分:1)

交通法规称,如果您等待绿灯,您可以保证能够安全过马路。

你抱怨说,并非所有穿过红灯的人都会被卡车立即碾碎。