-1

我的项目 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 我现在尝试在构造之前使用硬编码变量值来创建项目对象:

name = "itemName";
desc = "itemDesc";
id2 = 2;

它仍然在该行崩溃:

Item* tempItem = new Item(name, id2, desc);
4

1 回答 1

0

a 的长度是有限制的std::stringstd::length_error超过该长度时抛出。实际限制取决于您的编译器对标准模板库的实现。

从 C++ 标准(19.2.4):

该类length_error定义作为异常抛出的对象类型,以报告尝试生成长度超过其最大允许大小的对象。

您可以通过读取 的值来检查允许的最大字符串大小string::max_size

于 2012-12-01T11:53:27.070 回答