我正在根据读取的文件大小创建一个字符数组。如果找不到该文件,则不会创建该数组。当我打电话给我的析构函数时,我收到一个错误,我想这是告诉我指针是无效的,因为找不到文件。我想要做的只是检查该类是否已正确加载到缓冲区中。我可以添加一个成功标志并在析构函数中检查它,但我认为有更好的方法。如何在删除数组之前检查数组是否已分配
在类的头:
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)
行的访问冲突。我试图检查数组是否存在,然后删除它,如果它。
使用RAII所以你没有在第一时间担心这个问题。 – chris 2013-02-25 07:35:23
究竟是什么错误?看起来应该可以正常工作。 – 2013-02-25 07:36:33
错误指向if(m_fileBuffer)行。 Loader.exe中0x00087bbc未处理的异常:0xC0000005:访问冲突读取位置0xccccccf0。 – 2013-02-25 07:40:48