[英]Char* Array Memory Leak
我在char*
在char*
数组中使用的内存时遇到问题。 在下面的代码片段中,我正在创建一个名为input
的char*
数组,该数组一次保存指向单个单词的指针,然后在该数组的末尾保留一个指针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.