我有一个问题,无法确定程序中导致内存泄漏的原因。以下是我正在运行的代码:
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的检测结果,这段代码没有任何内存泄漏。但我在原始代码中没有释放哪些内存呢?我的测试代码与原始代码有什么不同?非常感谢您的帮助。
//...
代码中意外地重用或重置了k
? - TheUndeadFish