我的项目atm会出现一些奇怪的错误和崩溃。
从崩溃开始,我收到了这条消息:
terminate called after throwing an instance of 'std::length_error'
what(): basic_string::_S_create
所以我开始添加一些 cerr<< “1”等尝试查找它崩溃的线路。
现在我找到了崩溃线,尽管它没有打印出相同的错误代码。事实上,它没有说什么,只是崩溃。
导致崩溃的行是:
Item* tempItem = new Item(name, id2, desc);
Item.h构造函数如下所示:
Item(std::string name_, int itemId_, std::string description_ = "")
: name(name_), itemId(itemId_), description(description_){}
我发送的变量如下所示:
string name = "Frying pan";
int id2 = 1;
string desc = "It's all rusty";
任何想法? (如果您需要更多代码,请告诉我您需要的内容,我将在其中进行编辑)
修改 一些更新的信息:
name.max_size() = 1073741820
name.length() = 9
desc.max_size() = 1073741820
desc.length() = 14
EDIT2 我现在尝试创建Item-objects,并在构造之前对变量值进行硬编码:
name = "itemName";
desc = "itemDesc";
id2 = 2;
并且它仍然在线上崩溃:
Item* tempItem = new Item(name, id2, desc);
答案 0 :(得分:0)
std::string
可能有多长时间。超过该长度时会抛出std::length_error
。实际限制取决于编译器的标准模板库的实现。
来自C ++标准(19.2.4):
类
length_error
定义了抛出的对象类型 报告尝试生成长度为的对象的异常 超过其最大允许尺寸。
您可以通过阅读string::max_size
的值来检查允许的最大字符串大小。