簡體   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