繁体   English   中英

内存泄漏(char [])

[英]Memory Leak (char[])

当我运行程序时,它可能会运行一段时间,然后突然间,它将遇到巨大的内存泄漏。 我使用堆崩溃时的快照对其进行了跟踪,并且我有一个神秘的char [],其大小为232,023,801字节。 直到崩溃发生的前几分钟,都没有异常行为。 我使用char数组的唯一地方是以下代码:

string ReadString(DWORD64 addr) {

    char* buffer = new char[128];

    bool validChar = true;
    for (int c = 0; c < 128 && validChar; c++) {
        buffer[c] = Mem.Read<char>(addr+ (0x1 * c), sizeof(char));
        if (!isalnum(buffer[c]) && !ispunct(buffer[c]))
            validChar = false;
    }
    string ret= string(buffer);
    delete[] buffer;
    return ret;
}

这些代码应该做的就是从内存中读取一些字符,将char数组保存为字符串,清理该数组,然后返回该字符串。 内存泄漏是如何产生的? 还是堆快照中的char []可能指向另一个问题?

假设这里的stringstd::string

您调用string(buffer) ,它假定buffer是0终止的,并分配了一个新字符串。 但是您的代码不能确保buffer实际上是0终止的,因此这可能导致未定义的行为,包括潜在的崩溃或为字符串分配过多的内存。

您可能想改用string(buffer, size)构造函数,该构造函数不需要buffer以0结尾。

我也建议您避免手动进行new / delete 一种实现方法是创建一个空字符串,并将输入的字符push_back回读。 这样可以避免使用buffer

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM