【发布时间】:2016-05-23 10:53:26
【问题描述】:
在这个函数中,我需要返回一个 char* 变量,在我返回它之前,我打印它并且它打印得很好。导致返回变量错误的变量发生了什么,为什么?
功能:
const char* NameErrorException::what() const throw()
{
std::string str = "NameErrorException: name \'";
str += _name;
str += "\' is not defimed";
std::cout << str.c_str()<< std::endl; //Prints good
return str.c_str();
}
打印代码:
catch (std::exception& ex)
{
//Prints something like "▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌♀·┘v♦"
std::cout << ex.what() << std::endl;
}
(NameErrorException 继承自异常)
谢谢!
【问题讨论】:
-
可能duplicate.
-
str 是一个局部变量,与所有局部变量一样,它将在方法结束时被收集。如果你在方法中返回一个有效的指针,如果它来自一个局部变量,它将在方法之外是无效的,除非你为它分配了空间。这也适用于像 c_str() 这样的返回指针,除非你有理由认为返回的指针不会在以后被销毁,这肯定不是你的情况。
-
也许不一定是重复的,但肯定有这个问题的答案。