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;
}