经过大量的挖掘和搜索,我发现了我的问题的根源。本质上这个代码被执行,并且在它自己的项目中它会导致相同的错误。我发现我无法将智能指针重置为新的字符串......但是为什么?还有一个简单的方法呢?boost :: scoped_array上的_BLOCK_TYPE_IS_VALID错误:
scoped_array<char> sptr;
char* nptr = "Hello";
sptr.reset("");
sptr.reset(nptr);
编辑 -
我想我已经想通了。在重置时,智能指针试图删除并清空字符数组(“”),由于没有使用新操作符,因此未分配到堆上(ahem !!?!!?!???!?!)。因此,当程序试图释放内存时,这个程序会崩溃。所以纠正我,如果我错了,但字符串本身会存储在程序的可执行字节流本身?如果是这样,仅供将来参考,是否有强制分配新字符串的方法?