gpt4 book ai didi

c++ - 返回 std::string 时 Valgrind 内存泄漏

转载 作者:行者123 更新时间:2023-11-28 06:18:22 25 4
gpt4 key购买 nike

<分区>

我在我们的代码库上运行 valgrind 工具,我在下面的函数中看到许多内存泄漏。

std::string utils::toUtf8(const sdk::String& str)     
{
ByteString byteStr = str.ToUtf8();
return std::string(byteStr.GetConstData());
}
  • sdk::String 是我们内部的字符串对象表示。
  • str.ToUtf8() 返回一个 ByteString 对象,该对象在其生命周期结束后(在此函数结束时)释放内存。
  • getConstData() 返回一个指向上述 ByteString 对象内容的 const char 指针

下面是回溯

==2833== 3,830 bytes in 160 blocks are definitely lost in loss record 33,600 of 34,381
==2833== at 0x40084DA: malloc (vg_replace_malloc.c:296)
==2833== by 0x43898CC: SCHeapAlloc (in /opt/sw/libSystemCommon-2.7.so)
==2833== by 0x459BCF64: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.17)
==2833== by 0x459BEE9D: char* std::string::_S_construct<char const*>(char const*, char const*, std::allocator<char> const&, std::forward_iterator_tag) (in /usr/lib/libstdc++.so.6.0.17)
==2833== by 0x459BF59A: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.17)
==2833== by 0x1359C87B: utils::toUtf8(sdk::String const&) (String.cpp:17)

我无法理解为什么返回一个简单的字符串对象会泄漏内存。

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