以下に示すInitialSeedFinder関数の戻り値(シード変数に格納されている値)を出力すると、予期される文字列値を破損するランダムなASCII文字がいくつか取得されます。これは、バッファが2文字を超える場合にのみ発生します(つまり、順序変数が3未満の場合に機能します)。
このエラーは、以下のコードに見られるwhileループで発生しています...
なぜこれが起こっているのか誰かが説明できますか?read()関数がどのように機能するかと関係がありますか?
string InitialSeedFinder(int order, string fileName){
string seed;
ifstream inputStream;
Map<string, int> frequencyMap;
inputStream.open(fileName.c_str());
int offset = 0;
inputStream.clear();
char* buffer = new char [order];
//get all k char sequence
while (inputStream.get() != EOF) {
inputStream.seekg(offset);
inputStream.read(buffer, order);
string key(buffer);
if (frequencyMap.containsKey(key)) {
frequencyMap[key] = frequencyMap[key] + 1;
}
else {
frequencyMap.put(key, 1);
}
offset++;
}
inputStream.close();
//go through and find the most frequent key
int greatestFrequency = 0;
int frequency = 0;
foreach(string key in frequencyMap)
{
frequency = frequencyMap[key];
if (frequency > greatestFrequency) {
greatestFrequency = frequencyMap[key];
seed = key;
}
}
return seed;
}