я выделил некоторую память (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;
}
Код является частью более крупного класса, где 'wordList' является участником, не так ли? Можете ли вы показать все конструкторы и деструктор? –
Либо 'wordList' должен указывать на * valid * предыдущее распределение массива, либо должен быть' nullptr'. Все остальное - неопределенное поведение **. – WhozCraig
звучит так, будто вы случайно пишете больше, чем вам где-то разрешено, поэтому нам нужно немного больше контекста, чтобы понять, что не так –