2

我对这个问题感到困惑:

Const Char* Test() {
    String a = "anything";
    Return a.c_str();
}

Void Main() {
    Cout << Test(); // returns crap!
}

有人知道我没有想到什么吗?此页面不是 iPhone 优化的 ;-)

4

3 回答 3

1

尝试在堆上分配字符串:

string *a=new string("anything");
return (*a).c_str();
于 2012-08-02T12:36:51.260 回答
1

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();
}
于 2012-08-02T12:37:00.313 回答
1

String a位于自动内存中,当您返回时它会被销毁Test(),因此分配的内存c_str也会被释放

于 2012-08-02T12:29:57.433 回答