![](/img/trans.png)
[英]How do I delete a dynamically allocated array that is initialized in another function?
[英]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.