在删除数组之前,如何检查以确保已分配数组
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;
}
相关文章:
- 试图让变量检查数组中的某些内容
- 如何在C++中检查2D数组中负值的输入验证
- 使用for循环检查数组中的重复项
- 检查TCHAR数组输入是否为带符号整数C++
- std::数组边界检查如何工作?
- 检查输入 std::array 指针数据是否等于某个常量数组
- 给定一个大小为 N 的数组 S,检查是否可以将序列拆分为两个序列
- C++ 检查结果数组中有多少次数字
- 检查数组中是否有字符串中的值,如果没有,则添加它
- 有没有办法在c ++中清除空数组,请检查下面的代码以获取说明
- 如何检查一个字符是否与字符数组中的另一个字符匹配?
- 如何检查二维数组上的周围数字?
- 检查反向数组是否与原始数组相同
- 如何检查cin是否与数组中的一组数字匹配
- 如何检查数组中是否没有值
- 如何检查字节数组是protobuf序列化字节数组还是普通字节数组
- 检查彩虹数组(检查数组的反向样式是否与自身匹配)
- 使用数组检查连续性
- c++ 根据随机生成的数组检查用户输入的值
- 使用字符串数组检查用户输入