在删除数组之前,如何检查以确保已分配数组

How do I check to make sure an array has been allocated before I delete it

本文关键字:数组 检查 分配 确保 何检查 删除      更新时间:2023-10-16

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

在类标题中:

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

记住将数组指针初始化为NULL。否则,该值未定义,检查可能无法工作。

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

您可能会收到编译器的警告。如果你使用了valgrind,你肯定会收到关于检查单位化值的警告。

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;
}