在使用vs调试时,析构函数执行时在’scalar deleting destructor’的位置报错,怀疑是指针被delete了多次,但最后发现是”被释放的内存存在越界问题“,比较难发现。问题简要如下
class MemCorrupt {
public:
typedef std::unique_ptr<char[]> char_ptr_t;
MemCorrupt() {
ptr_ = char_ptr_t(new char[8]);
sprintf(ptr_.get(),"%08d",1);
}
private:
char_ptr_t ptr_;
};
如上所示,分配了8个char的内存,写入8宽度的字符串,但sprintf默认会在末尾加’\0’,导致内存越界。