我对这个问题感到困惑:
Const Char* Test() {
String a = "anything";
Return a.c_str();
}
Void Main() {
Cout << Test(); // returns crap!
}
有人知道我没有想到什么吗?此页面不是 iPhone 优化的 ;-)
尝试在堆上分配字符串:
string *a=new string("anything");
return (*a).c_str();
C语言是基于堆栈的。函数 Test() 中的字符串 a 在堆栈中分配。
const Char* Test() {
std::string a = "anything"; // Allocated in stack based
return a.c_str(); // A is freeing for return.
}
Void Main() {
std::cout << Test(); // returns crap!
}
const char* Test(std::string *a) {
*a = "anything";
return a->c_str();
}
Void Main() {
std::string a;
std::cout << Test(&a);
}
或者
const Char* Test() {
**static** std::string a = "anything"; // Allocated in data memory
return a.c_str(); // data memory freed when application terminating.
}
Void Main() {
std::cout << Test();
}
String a
位于自动内存中,当您返回时它会被销毁Test()
,因此分配的内存c_str
也会被释放