C++ 如何纠正valgrind发现的错误?

C++ 如何纠正valgrind发现的错误?,c++,valgrind,C++,Valgrind,我正在尝试使用valgrind来清除一些代码,但我似乎不知道如何更正它所识别的一些错误。这有什么问题吗 std::string sLog = parseString( ... ); m_sVideoCapLogFile.append(sLog); 当sLog字符串离开{}的作用域时,它不是被清理了吗? 我试着给dtor打电话,要求他这样做: sLog.std::string::~string() 但这是行不通的,而且这样做似乎是错误的。 Valgrind将此标记为: 1个块中的97个字节可

我正在尝试使用valgrind来清除一些代码,但我似乎不知道如何更正它所识别的一些错误。这有什么问题吗

 std::string sLog = parseString( ... );
 m_sVideoCapLogFile.append(sLog);
当sLog字符串离开{}的作用域时,它不是被清理了吗? 我试着给dtor打电话,要求他这样做:

sLog.std::string::~string()

但这是行不通的,而且这样做似乎是错误的。 Valgrind将此标记为:

1个块中的97个字节可能在丢失记录7(共7个)中丢失

我该怎么清理

谢谢,
-安德烈斯

你如何确定不是该代码附近的其他东西导致了泄漏?
sLog.std::string::~string()-不要这样做。相反,做一个标记并发布它。我不确定它是否与代码相近。这就是为什么我要用valgrind来清理所有可疑的东西。valgrind报告了如此多的错误,以至于很难知道真正的问题是什么以及我应该忽略什么。我现在正在进行压制。我觉得valgrind知道的比我多,所以我希望我的代码能够通过审查。在大多数情况下,valgrind太好了,无法压制。虽然给定的代码看起来并没有错,但很可能是由内存踩踏造成的。这里的97字节是多少?是字符串缓冲区的长度(例如
长度
容量
)?若您将字符串设置为常量,而不是调用
parseString
,消息是否会持续?相反,如果您添加注释
追加
,会发生什么情况?这将为您提供查找位置的方向(尽管在内存损坏的情况下,它可能不是正确的)。