vso*_*tco 48 c++ memory pointers undefined-behavior
我对以下代码感到有点困惑:
#include <iostream>
const char* f()
{
const char* arr[]={"test"};
return arr[0];
}
int main()
{
auto x = f();
std::cout << x;
}
Run Code Online (Sandbox Code Playgroud)
在我看来,这段代码应该是UB(未定义的行为).我们返回一个指向本地范围内的C风格数组元素的指针.事情应该出问题.但是,我测试过的编译器都没有抱怨(我用过-Wall -Wextra -pedanticg ++和clang).valgrind也不抱怨.
上面的代码是有效的还是人们会想到的UB?
PS:运行它似乎产生"正确"的结果,即显示"测试",但这并不表示正确性.
Bar*_*rry 77
不,这不是UB.
这个:
const char* f()
{
const char* arr[]={"test"};
return arr[0];
}
Run Code Online (Sandbox Code Playgroud)
可以改写为等效的:
const char* f()
{
const char* arr0 = "test";
return arr0;
}
Run Code Online (Sandbox Code Playgroud)
所以我们只是将一个本地指针返回给字符串文字.字符串文字具有静态存储持续时间,没有任何悬挂.功能真的如下:
const char* f()
{
return "test";
}
Run Code Online (Sandbox Code Playgroud)
如果你做了这样的事情:
const char* f() {
const char arr[] = "test"; // local array of char, not array of char const*
return arr;
}
Run Code Online (Sandbox Code Playgroud)
现在那是UB - 我们正在返回一个悬空指针.