2012-12-01 106 views
-1

我從我的項目atm得到一些奇怪的錯誤和崩潰。奇怪的自發運行崩潰

它開始了崩潰,我得到這個消息:

terminate called after throwing an instance of 'std::length_error' 
    what(): basic_string::_S_create 

於是我開始加入一些CERR < <「1」等,試圖找到它墜毀哪一行。

現在我發現了crash-line,雖然它不打印出相同的錯誤代碼。事實上,它什麼也沒說,只是崩潰。

導致崩潰的線路是這樣的:

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); 
+0

調試器不會比在代碼中散佈'cerr'消息更簡單嗎? – Barmar

+0

任何機會你負的長度傳遞給字符串構造函數? – billz

+0

如果你嘗試創建一個字符串t(「something」,-1);你可以得到同樣的例外 – billz

回答

0

std::string可能有多長時間是有限制的。當超過該長度時,引發std::length_error。實際限制取決於您的編譯器對標準模板庫的實現。

從C++標準(19.2.4):

length_error定義拋出 異常來報告試圖產生一個對象,其長度 超過其最大允許的大小的對象的類型。

您可以通過讀取string::max_size的值來檢查允許的最大字符串大小。

+0

嗯,但我沒有得到這個錯誤了。此外,不應該「在所有的範圍內生鏽」是否在限制之內?它不像它是一個很長的字符串。 –