为什么解除分配内存会导致崩溃?

时间:2013-10-27 20:11:23

标签: c++ memory memory-management struct

我为这个结构分配了一些内存(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[]导致程序冻结?

wordListclass 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;
    }

1 个答案:

答案 0 :(得分:0)

如果你没有在有问题的行之前的任何地方分配wordList,那么你正试图处理未分配的内存。