首页 > 解决方案 > 在其范围之外使用硬编码的字符数组指针,为什么没有崩溃

问题描述

#include <iostream>

using namespace std;

int main()
{
    char * a = nullptr;
    
    {
        char * b = (char *) "hello";
        a = b;
    }
    
    cout << a << endl; // prints hello

    return 0;
}

我有上面的代码。我很难理解为什么代码不会崩溃。我的推理是我预计会发生崩溃,因为我将指针 b 传递给带有指针 a 的上层作用域并将其用于 cout。由于“hello”是在 b 的范围内创建的,并且没有使用新的关键字,我希望它会像范围内的变量一样自动清理自己。我在想什么错??

标签: c++

解决方案


C 风格的字符串文字"hello"具有静态存储持续时间;它存在于程序的生命周期中。然后它在定义的范围之后仍然有效cout << a << endl;(虽然a指向它) 。b

字符串文字具有静态存储持续时间,因此在程序的生命周期内都存在于内存中。


推荐阅读