第1个回答 2012-05-13
C++ 中应当使用new和delete 来分配、销毁堆内存。如果使用new创建 则必须使用delete销毁。
当然也可以使用malloc/free 来做。部分编译器会对多次delete或者free 报错,但是对于gcc而言:free和delete的对错误对象使用是会被接受的(这么做的原因是由于 编译器不知道指针指向的到底是什么,也不知道某些已编译的二进制代码中是否返回了一个指向堆空间的指针)。编译期不报告错误,但不代表这就是对的,使用cppcheck会尝试检测这种错误。
所有的错误,虽然编译器不会智能到告诉你怎么修改成绝对正确的,但是它的错误信息也不是没用的。很多时候看错误信息就知道你错在哪里了。free相关的错误可能有上百种吧,你只说报错,我也不是神来着……