奇怪的自发运行崩溃

时间:2012-12-01 11:50:34

标签: c++ debugging crash

我的项目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);

1 个答案:

答案 0 :(得分:0)

std::string可能有多长时间。超过该长度时会抛出std::length_error。实际限制取决于编译器的标准模板库的实现。

来自C ++标准(19.2.4):

  

length_error定义了抛出的对象类型   报告尝试生成长度为的对象的异常   超过其最大允许尺寸。

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