1

この構造体にメモリ ( 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;
    }
4

1 に答える 1