我为这个结构分配了一些内存(Word * wordList
):
struct Word{
int occurrences;
std::string wrd;
};
写作:
Word * tempList = new Word[numWords + 1];
for(int i = 0; i < numWords; i++){
tempList[i] = wordList[i];
}
delete[] wordList;
wordList = tempList;
tempList = 0;
Word currWord = {1, wrd};
wordList[numWords] = currWord;
numWords++;
numWords
是在调用此代码之前和之后wordList的大小,wrd
是传递给方法的字符串。此代码用于在wordList
中不存在时添加单词。
我的问题是,当调用delete[]
时,程序停止工作。我尝试使用delete
看看会发生什么,并且该程序在我能说的时候工作得很好。发生了什么以及为什么delete[]
导致程序冻结?
wordList
是class WordsOfLength
的成员:
class WordsOfLength{
private:
int numWords;
Word * wordList;
public:
WordsOfLength();
WordsOfLength(int nNumWords, Word* nWordList);
~WordsOfLength();
void addWord(std::string wrd);
std::string getWord(int frequency);
friend void WordData::writeWordData(const char* fileName);
friend void WordData::setWordData(const char* fileName);
};
使用构造函数:
WordsOfLength::WordsOfLength(){
numWords = 0;
wordList = NULL;
}
和析构函数:
WordsOfLength::~WordsOfLength(){
delete[] wordList;
wordList = 0;
}
答案 0 :(得分:0)
如果你没有在有问题的行之前的任何地方分配wordList
,那么你正试图处理未分配的内存。