-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 構築の直前に、変数値をハードコーディングしてItemオブジェクトを作成しようとしました。

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

そしてそれはまだラインでクラッシュします:

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

1 に答える 1

0

a の長さには制限がstd::stringあります。std::length_errorその長さを超えるとスローされます。実際の制限は、コンパイラの標準テンプレート ライブラリの実装によって異なります。

C++ 標準 (19.2.4) から:

このクラスlength_errorは、長さが最大許容サイズを超えるオブジェクトを生成しようとしたことを報告するために、例外としてスローされるオブジェクトのタイプを定義します。

の値を読み取ることで、最大許容文字列サイズを確認できますstring::max_size

于 2012-12-01T11:53:27.070 に答える