_BLOCK_TYPE_IS_VALID 在提升::scoped_array 上出错
_BLOCK_TYPE_IS_VALID error on boost::scoped_array
经过大量的挖掘和搜索,我找到了问题的根源。从本质上讲,此代码被执行,并且在它自己的项目中会导致相同的错误。我看到我无法将智能指针重置为新字符串...但是为什么?还有没有一个简单的方法可以解决这个问题?
scoped_array<char> sptr;
char* nptr = "Hello";
sptr.reset("");
sptr.reset(nptr);
编辑-
我想我已经想通了。重置时,智能指针尝试删除并清空字符数组 ("),由于未使用新运算符,因此未在堆上分配字符数组 (ahem !?!!?!???!?!)。因此,该程序在尝试释放内存时会严重中断。因此,如果我错了,请纠正我,但字符串本身会存储在程序的可执行字节流本身中吗?如果是这样,仅供将来参考,有没有办法强制分配新字符串?
您识别错误是正确的。 scoped_array
会调用它所持有的对象delete[]
;毕竟,这是它存在的唯一目的。你不能delete[]
一些没有new[]'d
的东西,否则你会得到未定义的行为。
但是,如果需要动态字符串,则应仅使用 std::string
。您尝试创建的任何内容都允许scoped_array<char>
像字符串一样行事,最终都会成为std::string
的劣质版本。然后就很简单:std::string s; s = ""; s = "Hello"
.
相关文章:
- C++11 中不同类型的对象的 std::array 的替代方案
- constexpr begin of a std::array
- C++如果必须在编译时确定大小,std::array 有什么意义?
- OpenGL VBO Indexing ( How to compute Index Array)
- 标准::unordered_map 中的 std::array 的值初始化
- "Warning: Comma within array index expression"但逗号分隔函数参数
- 确保编译时的特定 std::array 位置
- std::array的长度有大小限制吗?
- 将 std::array 移动到另一个 std::array
- 首先按给定顺序打印所有数字,然后使用 Array 打印所有字符和其他符号
- 为什么 std::shared_ptr 被认为是"heavy"和"expensive",但 std::array "same perfprmance as plain (c-style) arrays
- 将 **float array 从 C++ Dll 传递给 python
- std::bind on statd::array 的运算符 []
- 检查输入 std::array 指针数据是否等于某个常量数组
- 我可以安全地复制矢量<array>吗?
- 解析问题 - 预期的非限定 ID - #include <array> 编译错误
- 如何读/写或遍历 std::array 中的特定元素范围?
- 通过 host() 从 af::array 检索数据会导致错误的数据
- 是否可以使用 std::array 作为 POD 结构的数据容器?
- 如何在C++中传递一个大小未知的 std::array?