gpt4 book ai didi

c++ - 为什么显式调用析构函数会导致双重释放?

转载 作者:行者123 更新时间:2023-12-03 18:36:11 25 4
gpt4 key购买 nike

下面的代码以 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com