作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面的代码以 free(): double free detected in tcache 2
结尾。我想知道错误发生的内部过程。
#include <string>
class test
{
private:
std::string member;
public:
test(const std::string & arg) { member = arg; };
};
int main()
{
test T = test("test test test test");
T.~test();
return 0;
}
错误取决于给定字符串的长度;如果您将
"test test test test"
更改为
"test"
,则程序运行良好,至少在我的计算机上使用
g++
是这样。
最佳答案
std::string
有一个用于短字符串的内部缓冲区,以避免内存分配。如果字符串很短,则没有可释放的内存并且它可以工作。如果字符串很长,它会在每次调用析构函数时尝试释放缓冲区。
以下是有关短字符串优化的更多信息:
Meaning of acronym SSO in the context of std::string
关于c++ - 为什么显式调用析构函数会导致双重释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66388731/
我是一名优秀的程序员,十分优秀!