我根据我读取的文件大小创建一个字符数组。如果找不到该文件,则不会创建该数组。当我调用我的析构函数时,我得到一个错误,我认为它告诉我指针无效,因为找不到文件。我想要做的只是检查该类是否已正确加载到缓冲区中的文件中。我可以添加一个成功标志并在析构函数中检查它,但我认为有更好的方法。
在课程标题中:
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)
行时遇到访问冲突。我试图检查数组是否存在,然后删除它,如果它存在。
答案 0 :(得分:1)
请记住将数组指针初始化为NULL。否则,该值未定义,检查可能无效。
请记住在删除数组后将指针设置为NULL。否则if检查将再次通过,您将收到分段错误。
您可能会收到编译器的警告。如果您使用过valgrind
,那么肯定会收到关于检查单位值的警告。
答案 1 :(得分:1)
if (file.is_open())
{
m_fileSize = (int)file.tellg();
if(0 < m_fileSize)
m_fileBuffer = new char[m_fileSize];
.....
.....
}
在析构函数中:
if(m_fileSize && m_fileBuffer)
{
delete [] m_fileBuffer;
}