[英]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.