これが私のコードです:
std::string readString()
{
int strLen = Read<int>();
char* rawString = new char[strLen];
Read(rawString, strLen);
rawString[strLen] = '\0';
std::string retVal(rawString);
delete [] rawString;
return retVal;
}
最初の行は文字列の長さを読み取ります。
2 行目は文字列の長さで新しい char 配列 (c-string) を作成します
。3 行目は文字列を読み取ります (ファイルから読み取ります)
。4 行目は最後に NULL を追加します。
5 行目は、c-string から std::string を作成します。
6 行目は c-string を削除します (HEAP CORRUPTION HAPPENS HERE)
7 行目は文字列を返しますが、エラーのためにこの時点には到達しません。
6 行目にヒープ破損エラーが表示されます。CRT は、アプリケーションがヒープ バッファーの終了後にメモリに書き込みを行ったことを検出しました。
私の質問は明らかかもしれませんが、なぜヒープが破損するのですか? std::string を作成すると、文字列がコピーされ、c-string を安全に削除できるはずです。
現在、std::string を削除した後、c-string が c-string にアクセスしようとしているのではないかと疑っています。
何か案は?