簡體   English   中英

Char *陣列內存泄漏

[英]Char* Array Memory Leak

我在char*char*數組中使用的內存時遇到問題。 在下面的代碼片段中,我正在創建一個名為inputchar*數組,該數組一次保存指向單個單詞的指針,然后在該數組的末尾保留一個指針NULL (我相信)這是我唯一一次在代碼中分配內存的時間。

char* input[999];
//exec commands 
for(unsigned int i = 0; i < commands.size(); i++)
{
    string current = "";
    string word = "";
    int k = 0;
    for(unsigned int j = 0; j < commands.at(i).size(); j++) //iterate through letters
    {
        current = commands.at(i);
        //cout << "current: " << current << endl;
        if(current[j] == ' ')
        {
            input[k] = new char[word.size() + 1];
            strcpy(input[k], word.c_str());
            k++;
            word = "";
        }
        else
            word += current[j]; //add letter
        //cout << "word: " << word << endl;
    }
    input[k] = new char[word.size() + 1];
    strcpy(input[k], word.c_str());
    k++;
    input[k] = new char[1]; //add the NULL char *
    input[k] = NULL;
    ...

稍后,我嘗試使用以下代碼片段取消分配此內存:

for(int z = 0; z < k; z++)
{
    delete[] input[z];
}

我正在遍歷char*數組並刪除在每個索引處分配的內存。 如果不使用此代碼段,則valgrind會通知我內存泄漏。 使用此代碼段,valgrind通知我的內存泄漏少於以前。 我仍然對內存的問題仍然毫無疑問感到困惑

我不確定要刪除剩余的分配內存(或者如果導致內存泄漏的原因實際上是我代碼中的其他原因),我不確定。 我感謝所有幫助,建議和提示。

我認為,您的問題出在以下情況中,

input[k] = new char[1]; //add the NULL char *
input[k] = NULL;

在這里,沒有free input[k] ,您正在為其分配NULL 因此,先前的input[k]丟失了。

如果您真的想讓input[k]保持NULL ,( 也許是一個哨兵值 ),您可以簡單地做

input[k] = NULL;

無需單獨分配內存。

您不需要在input[k] = new char[1]; //add the NULL char *地方創建新字符input[k] = new char[1]; //add the NULL char * input[k] = new char[1]; //add the NULL char *只需保留NULL賦值,它就可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM