作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
<分区>
我的问题是关于以下简单代码:
#include <iostream>
using namespace std;
const char* call()
{
string str("Hey there.");
return str.c_str();
}
int main()
{
const char* blah = call();
cout << blah << endl;
system("pause");
return 0;
}
输出:“你好。”
现在,“嘿,那儿”的内存是怎么回事?当 std::string 在方法结束时被销毁时,不会被销毁或导致内存泄漏?我不是 C++ 专家,但我相信字符串是否分配了包含“Hey there”的内存。在堆栈上,当字符串超出范围(方法结束)时,它会被删除,如果字符串在堆上分配内存来存储“Hey there”。那么这将导致内存泄漏,因为它显然不会破坏内存,因为我们在字符串超出范围后访问内存。
那么,我如何能够访问 c_str() 指向的内存块而不导致内存泄漏?
非常感谢您的回复。
我是一名优秀的程序员,十分优秀!