gpt4 book ai didi

c++ - Stringstream 到 Vector 抛出 std::bad_alloc

转载 作者:太空宇宙 更新时间:2023-11-04 14:42:10 29 4
gpt4 key购买 nike

我稍微修改了 Boost Property Tree,我遇到了 this例子。我需要将最终结果转换为 vector ,所以我只是在后面添加了一行

write_json(ss, root);

像这样:

std::vector<char> testVec(std::begin(ss.str()), std::end(ss.str()));

我也试过这个:

std::string someString = ss.str()
char* someArray = (char*)someString.c_str();
std::vector<char> someVec(someArray, someArray+sizeof(someArray));

在这两种情况下,我都会收到此错误:

terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc

有什么提示我做错了吗?我想这不是属性树的问题。这是一个字符串到 vector 转换的问题。我想这是有道理的,因为 vector 应该只是一维的,但我不知道如何将该字符串转换为 vector 并再次取回它。

最佳答案

这失败了:

std::vector<char> testVec(std::begin(ss.str()), std::end(ss.str())); 

因为 std::begin()std::end() 没有关联到同一个 std::string 实例。 ss.str()每次返回一个新的 std::string 实例,它不会返回一个 std::string& 给一些内部成员。

这是不正确的:

std::vector<char> someVec(someArray, someArray+sizeof(someArray)); 

因为 sizeof(someArray)sizeof(char*)。如果 someArray 中的元素少于 sizeof(char*),将尝试读取不应读取的内存。

可能的解决方案:

std::string someString = ss.str();
std::vector<char> someVec(someString.begin(), someString.end());

关于c++ - Stringstream 到 Vector<char> 抛出 std::bad_alloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12267199/

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