Char* 数组内存泄漏
Char* Array Memory Leak
我在取消分配我在 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
-ing input[k]
,您将向其分配 NULL
。这样,前面的input[k]
就丢失了。
如果你真的想让input[k]
持有NULL
,(可能作为标记值),你可以简单地做
input[k] = NULL;
不需要单独分配内存
您不需要在它说的地方创建一个新的字符 input[k] = new char[1]; //add the NULL char *
只需保留 NULL 赋值,它应该可以正常工作。
我在取消分配我在 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
-ing input[k]
,您将向其分配 NULL
。这样,前面的input[k]
就丢失了。
如果你真的想让input[k]
持有NULL
,(可能作为标记值),你可以简单地做
input[k] = NULL;
不需要单独分配内存
您不需要在它说的地方创建一个新的字符 input[k] = new char[1]; //add the NULL char *
只需保留 NULL 赋值,它应该可以正常工作。