如果是编译错误,则表明没有包括头文件cstdlib
如果是运行错误,则表示free函数参数的指针值有错误,主要如下:
1、指向目标并不是可以释放的空间
2、指向目标已经释放过了,现在重复释放
3、指针值为0
4、不是原来动态分配空间的首地址
具体情况还得看看代码才行
C++ 中应当使用new和delete 来分配、销毁堆内存。如果使用new创建 则必须使用delete销毁。
当然也可以使用malloc/free 来做。部分编译器会对多次delete或者free 报错,但是对于gcc而言:free和delete的对错误对象使用是会被接受的(这么做的原因是由于 编译器不知道指针指向的到底是什么,也不知道某些已编译的二进制代码中是否返回了一个指向堆空间的指针)。编译期不报告错误,但不代表这就是对的,使用cppcheck会尝试检测这种错误。
所有的错误,虽然编译器不会智能到告诉你怎么修改成绝对正确的,但是它的错误信息也不是没用的。很多时候看错误信息就知道你错在哪里了。free相关的错误可能有上百种吧,你只说报错,我也不是神来着……
free已经释放的内存必然会报错