char *带记忆泄漏

Char * w/ Memory Leak

本文关键字:泄漏 记忆 char      更新时间:2023-10-16

我有一个问题,可以识别导致程序中的内存泄漏的原因。以下是我正在运行的代码:

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] = NULL;
    //...
    //...
    for(int z = 0; z <= k; z++)
    {
        delete[] input[z];
    }
}

通过Valgrind运行此代码,我看到我的内存肯定会丢失。为了重新创建场景和调试,我在这里有一个较小的比例版本:

int main()
{
    char* var[999];
    string s = "1234";
    var[0] = new char[4 + 1];
    strcpy(var[0], s.c_str());
    delete [] var[0];
    return 0;
}

根据Valgrind,此代码没有任何内存泄漏。我没有在原始代码中取消分配什么?我的测试代码是什么,我的原始代码不做什么?谢谢,感谢您的任何帮助。

,如果您要在代码以后在代码中使用delete [],通常需要使用新的char*来声明您的char*。看起来只是一个简单的错误。

我是C 的新手

char **input=new char*[999];