如何通过分配和交易失配解决此错误
How do I fix this error with allocation and deallocation mismatch?
cppcheck报告作为错误"与 delete cname;
的行不匹配分配和交易:cname"。我看不出使用我的代码版本的问题 - 看起来有效。
我的代码错误吗?我如何解决它?使用我的代码有什么后果?
if ( lenght != 0 )
{
char *cname = new char[lenght+1];
inbin.read(reinterpret_cast<char *>( cname ), lenght );
cname[lenght] = ' ';
*ptr_string = cname;
delete cname;
}
是的,当您使用new …[…]
语法分配数组时,应使用delete[]
对其进行处理。在您的情况下,您需要delete[] cname;
。
如果使用错误的delete
形式与new
匹配您的分配,则您的行为不确定:
§5.3.5/2 [expr.delete] 在第一个替代方案( delete对象)中,
delete
的操作数的值可能是无效指针值,指向以前 new-expression 创建的非阵列对象的指针,或指向代表这种对象基类的子对象的指针。如果没有,则行为是未确定的。在第二个替代方案( delete数组)中,delete
的操作数的值可能是由以前的数组 new> new> new-expression 产生的零指针值或指针值。如果不是,则行为是未固定的。
if ( lenght != 0 )
{
char *cname = new char[lenght+1];
inbin.read(reinterpret_cast<char *>( cname ), lenght );
cname[lenght] = ' ';
*ptr_string = cname;
delete[] cname;
}
相关文章:
- 如何解决错误:SCIP C++中的 SCIP 阶段无效 <10>
- 解决错误:运算符 [] 不匹配
- 开发如何解决错误193:%1不是Dev C 中的Win32应用程序
- 我该如何解决错误,说明创建图形对象没有放置在图形场景中
- 如何解决错误 C2719 在 Visual Studio 2010 C++ 中不存在代码行时
- 如何在C++中使用 ZeroMQ 发送包含数组的结构时解决错误
- 使用strupr和strlwr时如何解决错误"invalid conversion of char to char*"?
- Eigen SparseLU解决错误读取访问冲突,这>m_sup_to_col被0x111011101110112
- 如何解决错误:在Mac上令牌"("之前缺少二进制运算符?
- 如何解决错误:从" int* "到" int "的转换无效
- 如何解决错误PRJ0002:错误结果 -1073741515从"cl.exe"返回?
- 如何解决错误LNK2019:未解析的外部符号
- 解决错误的一般方法:变量周围的堆栈'x'已损坏
- 如何在Xcode中将长双精度转换为字符串格式?或如何解决错误"use of undeclared identifier 'to_string' "
- Eclipse conio.h正在解决错误
- 需要帮助解决错误 C2664
- 如何解决错误LNK2019:未解析的外部符号
- 如何解决错误:LNK2019:未解析的外部符号"public"?
- 无法解决错误LNK2019:未解析的外部符号
- 如何解决错误C2039