出现这种错误的原因有多个,基本原因有四个, 可以参见:SO。
错误如下:
比较常见的错误时,把多个对象的数组当做一个对象删除了,例如:
void testSharedPtr1()
{
//std::shared_ptr<TC> pt(new TC[5]); // will crash , since default desctrctor using delete
std::shared_ptr<TC> sptr1(new TC[5],
[](TC* p) { delete[] p; });
}
这里std::shared_ptr默认使用delete删除,因此会导致出现上述错误。使用lamda表达式可以解决。