読み取ったファイルのサイズに基づいて文字配列を作成しています。ファイルが見つからない場合、アレイは作成されません。デストラクタを呼び出すと、ファイルが見つからないためポインタが無効であることを示していると思われるエラーが表示されます。私がやりたいことは、クラスがファイルに正しくバッファにロードされているかどうかを確認することだけです。成功フラグを追加してデストラクタでチェックすることもできますが、もっと良い方法があると思います。
クラスヘッダーで:
uint32 m_fileSize;
char* m_fileBuffer;
コンストラクターで:
m_fileSize = 0;
m_fileBuffer = 0;
初期化関数では:
std::ifstream file(filename.c_str(), std::ios::in|std::ios::binary|std::ios::ate);
if (file.is_open())
{
m_fileSize = (int)file.tellg();
m_fileBuffer = new char[m_fileSize];
file.seekg (0, std::ios::beg);
file.read (m_fileBuffer, m_fileSize);
}
else
{
return false;
}
デストラクタで:
if(m_fileBuffer)
{
delete [] m_fileBuffer;
}
要約すると、ファイルが存在して読み込まれると、うまく機能します。そこにない場合、if(m_fileBuffer)
行を読んでアクセス違反が発生します。配列が存在するかどうかを確認し、存在する場合は削除しようとしています。