私はObjective-C/CからやってくるC++を学んでいます。ダミーのプロジェクトでは、/usr/share/dict/words
MacOSXマシンに保存されているファイルから単語をロードしたいと思います。
アイデアは、ファイルをロードして各単語を配列に入れることなのでarray
、タイプはstring
です。
しかし、配列でダイナミックメモリを正しく操作するのに問題があります-とを使用new
しdelete
ます。誰かが助けてくれるなら、私は以下のコードのいくつかを追加しました...
そのため、メモリエラーが発生します。
word:: A
word:: a
word:: aa
word:: aal
definitions(2758) malloc: *** error for object 0x100103b90: incorrect
checksum for freed object - object was
probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug
単語を読み込む:
string* Definition::loadWords()
{
int arrayLength = 0;
arrayOfWords = new string[arrayLength];
ifstream file;
file.open("/usr/share/dict/words");
if(file.is_open())
{
while(file.good()){
string word;
getline( file, word );
this->addWord(word, arrayOfWords, &arrayLength);
}
}
file.close();
cout << endl << "There are " << arrayLength << " words" << endl;
return arrayOfWords;
};
配列に単語を追加します。
void Definition::addWord(string newWord, string currentArray[], int* arrayLength)
{
cout << endl << "word:: " << newWord;
string *placeholderArray = new string[*arrayLength + 1];
placeholderArray[*arrayLength + 1] = newWord;
for(int i = 0; i < *arrayLength; i++){
placeholderArray[i] = currentArray[i];
}
(*arrayLength)++;
currentArray = placeholderArray;
delete [] placeholderArray;
}