gpt4 book ai didi

c++ - boost::scoped_array 上的_BLOCK_TYPE_IS_VALID 错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:59:56 25 4
gpt4 key购买 nike

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

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

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

编辑 -

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

最佳答案

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

但是,您应该只使用 std::string如果你想要一个动态字符串。您尝试创建的任何内容都允许 scoped_array<char>表现得像一个字符串最终会成为 std::string 的劣质版本。 .那么就很简单了:std::string s; s = ""; s = "Hello" .

关于c++ - boost::scoped_array 上的_BLOCK_TYPE_IS_VALID 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10264561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com