簡體   English   中英

在刪除數組之前,如何檢查以確保已分配數組

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

我正在根據我讀取它的文件大小創建一個字符數組。 如果找不到該文件,則不會創建該數組。 當我調用我的析構函數時,我得到一個錯誤,我認為它告訴我指針無效,因為找不到文件。 我想要做的只是檢查該類是否已正確加載到緩沖區中的文件中。 我可以添加一個成功標志並在析構函數中檢查它,但我認為有更好的方法。

在類標題中:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM