在其作用域之外使用硬编码的char数组指针,为什么没有崩溃


#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。由于";你好";是在b的作用域内创建的,并且没有使用新的关键字,我希望它能像作用域中的变量一样自动清理自己。我想错了什么??

类似"hello"的C样式字符串文字具有静态存储持续时间;它存在于程序的生命中。那么在定义了b的范围之后,它仍然对cout << a << endl;有效(而a指向它(。

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

最新更新