bugprone-undefined-memory-manipulation¶
查找对非平凡可复制对象调用内存操作函数 memset()
、memcpy()
和 memmove()
的情况,这些情况会导致未定义行为。
在非平凡可复制对象上使用内存操作函数会导致 C++ 代码中出现一系列难以察觉和处理的问题。最直接的问题是潜在的未定义行为,可能会导致对象状态被破坏或无效。这可能表现为运行时的崩溃、数据损坏或意外行为,从而难以识别和诊断根本原因。此外,内存操作函数的误用可能会绕过必要的特定于对象的操作(如构造函数和析构函数),导致资源泄漏或初始化不当。
例如,当使用 memcpy
复制 std::string
时,指针数据将被复制,这可能导致双重释放问题。
#include <cstring>
#include <string>
int main() {
std::string source = "Hello";
std::string destination;
std::memcpy(&destination, &source, sizeof(std::string));
// Undefined behavior may occur here, during std::string destructor call.
return 0;
}