用于以下功能:
const char *fstack()
{
char tab[100];
return tab;
}
const char *fc_str()
{
std::string s{"some text"};
return s.c_str();
}
const char * f_stringstream()
{
std::ostringstream s;
s<<"another text";
return s.str().c_str();
}
clang 发出警告 [-Wreturn-stack-address],尽管后面的 2 个并不完全在堆栈上,而是已经被删除并在堆上。无论如何。
我必须在以下代码或 clang++ 调用中更改什么才能获得相同的警告:
class C1 {
public:
std::string str;
};
const char* fun_class()
{
C1 c;
c.str="class text";
return c.str.c_str();
}
因为在最后一种情况下我根本没有收到任何警告。
我阅读了所有可用的 clang++ 警告列表,以找到合适的内容,对堆栈和堆进行了 grep,但没有任何结果。