0

我正在根据我读取的文件的大小创建一个字符数组。在未找到文件的情况下,不创建数组。当我调用我的析构函数时,我收到一个错误,我认为它告诉我指针无效,因为找不到文件。我想要做的只是检查类是否已正确加载到文件中的缓冲区中。我可以添加一个成功标志并在析构函数中检查它,但我认为有更好的方法。

在类头中:

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)行时遇到访问冲突。我正在尝试检查数组是否存在,如果存在则将其删除。

4

2 回答 2

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;
}
于 2013-02-25T07:40:19.407 回答
1

请记住将数组指针初始化为 NULL。否则,该值未定义,检查可能不起作用。

请记住在删除数组后将指针设置为 NULL。否则 if 检查将再次通过,您将得到分段错误。

您可能会收到来自编译器的警告。如果您使用过valgrind,您肯定会收到有关检查未初始化值的警告。

于 2013-02-25T07:37:32.970 回答