boost :: scoped_array上出现_BLOCK_TYPE_IS_VALID错误

时间:2012-04-22 01:46:40

标签: c++ boost smart-pointers scoped-ptr

经过大量的挖掘和搜索,我找到了问题的根源。本质上,这个代码被执行,并且在它自己的项目中它会导致相同的错误。我看到我无法将智能指针重置为新字符串......但为什么呢?还有一个简单的方法吗?

scoped_array<char> sptr;
char* nptr = "Hello";

sptr.reset("");
sptr.reset(nptr);

编辑 -

我想我已经明白了。在重置时,智能指针尝试删除并清空字符数组(“”),因为没有使用新的运算符,所以没有在堆上分配(哼!! !! !! ??? ??? !!!)。因此,当程序试图释放内存时,该程序将会崩溃。所以纠正我,如果我错了,但字符串本身是否会存储在程序的可执行字节流本身?如果是这样,仅供将来参考,是否有办法强制分配新字符串?

1 个答案:

答案 0 :(得分:0)

您在识别错误​​时是正确的。 scoped_array会在其持有的对象上调用delete[];毕竟,这是它存在的唯一目的。你不能delete[]不是new[]'d的东西,或者你得到未定义的行为。

但是,如果您想要动态字符串,则应该使用std::string。您尝试创建以允许scoped_array<char>像字符串一样行事的任何内容都将最终成为std::string的伪劣版本。然后它就像:std::string s; s = ""; s = "Hello"一样简单。