[英]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 []可能指向另一个问题?
假设这里的string
是std::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.