我正在使用Valgrind(内存泄漏工具)来查找潜在的内存泄漏。它是这样运行的:$ valgrind --leak-check = full ./myApp报告了以下内容:==9458== 15,007 bytes in 126 blocks are possibly lost in loss record 622 of 622==9458== at 0x4029FDE: operator new(unsigned int) (vg_replace_malloc.c:313)==9458== by 0x415F213: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.19)==9458== by 0x4161125: char* std::string::_S_construct<char const*>(char const*, char const*, std::allocator<char> const&, std::forward_iterator_tag) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.19)==9458== by 0x41617AF: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.19)==9458== by 0x808B061: Parser::parseLinear(rapidxml::xml_node<char>*, Linear*) (Parser.cpp:663)==9458====9458== LEAK SUMMARY:==9458== definitely lost: 0 bytes in 0 blocks==9458== indirectly lost: 0 bytes in 0 blocks==9458== possibly lost: 20,747 bytes in 257 blocks==9458== still reachable: 57,052 bytes in 3,203 blocks==9458== suppressed: 0 bytes in 0 blocks==9458== Reachable blocks (those to which a pointer was found) are not shown.==9458== To see them, rerun with: --leak-check=full --show-leak-kinds=all==9458====9458== For counts of detected and suppressed errors, rerun with: -v==9458== ERROR SUMMARY: 21 errors from 21 contexts (suppressed: 0 from 0)根据摘要,似乎存在“可能丢失”的内存泄漏。但是,在Parser.cpp中跟踪第663行之后,我似乎无法确定问题所在。 xml_node *是开源库RapidXML的一部分。源代码如下所示:line 661: Tracker track;line 662: xml_node<>* trackingNode = node->first_node(); // rapidxml APIline 663: track.setValue(trackingNode->first_node()->value());setValue定义为:void Tracker::setValue(const string& s) { this->val = s;} 最佳答案 根据rapidxml manual,xml_base::value()不会使用rapidxml::parse_no_string_terminators选项返回以零结尾的字符串。如果设置了此选项,则根据xml_base::value_size()终止字符串。另外,在调用xml_base::value()之前,请检查该值是否不为空。在其他情况下,value()返回空字符串,这可能是另一个内存泄漏问题。关于c++ - 解释Valgrind内存泄漏摘要日志,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25651934/
10-11 20:19