2008-10-07 72 views
2

bad_alloc的錯誤:: string的

std::string path(`"C:\\Path.pth`"); 

但現在它不工作:現在,我通過調用我std::string用了一切工作昨天。它會拋出一個bad_alloc。看起來像'\'字符是問題。我甚至嘗試使用\x5C作爲它的ascii值,而不是相同的結果。

現在,我的問題是,是否有可能已經搞砸了一些#define,一些編譯器選項或其他可能導致這種情況的「非代碼」?我使用VS 2005

任何幫助,將不勝感激


PierreBdR

..這聽起來很容易。或者至少,它必須:P

由於沒有人提到某種/ SetStringCharSize:2bit編譯器選項,我認爲可以安全地假設我的代碼必須在某處搞亂某些東西,而且它不是隻是一個愚蠢的編譯器選項(或類似),這是錯誤的..

+0

如果要顯示一個雙抗斜線,選擇包含它的其定義爲代碼的部分。 – Burkhard 2008-10-07 09:36:58

+0

只要檢查一下,你可以先將字符串賦給一個const char *,然後把它傳遞給字符串構造函數? – Daemin 2008-10-07 10:20:32

+0

Meeh:你能編輯你的標題嗎?該問題與字符串或反斜槓無關 – Arkadiy 2008-10-07 12:31:14

回答

0

定義字符串:「C:\\ Path.pth」

0

不,你沒有擁有它的「工作」昨天無論是。 「\」需要轉義像這樣:

std::string path("c:\\path.pth"); 

你大概昨天,它可以在這種情況下工作,以及做了一個斜槓。

std::string path("c:/path.pth"); 
-1

假設你的雙反斜槓是正確的,我猜你是在Vista上運行?

Vista將不會讓你寫入默認C盤的根目錄下。請嘗試以下之一:

  • 關閉UAC,或
  • 運行應用程序爲「管理員」,或
  • 寫入到子目錄中。
6

如您的錯誤提示,問題歸因於內存分配(即bad_alloc異常)。

因此,無論你有沒有更多的內存(不太可能),或者你有在什麼地方的緩衝區溢出(很可能在我看來)或類似雙自由一些其他的內存問題。

總之,你做的東西弄亂了內存管理佈局(即所有這些信息分配的塊之間)。請檢查之前這個電話。

3

該錯誤已找到並修復。

好像TinyXML的是有一個bug與TIXML_USE_STL定義中使用時。所以出於某種原因,TiDocument的構造函數破壞了我的內存佈局,所以我定義的下一個std::string必須拋出bad_alloc異常 - 幸運的是,對於我來說,恰好在字符串的第4個字符處,在我的情況下是'\ ',導致一個相當微妙的錯誤。

1

不要忘了,你應該使用正斜槓的路徑,即使是在Windows:

[15.16]爲什麼我不能開在不同的目錄中的文件,如」 .. \測試。 DAT「?

因爲「\ t」是一個製表符。

即使在使用反斜槓(DOS,Windows,OS/2等)的操作系統上,也應該在文件名中使用正斜槓。例如:

#include <iostream> 
#include <fstream> 

int main() 
{ 
    #if 1 
    std::ifstream file("../test.dat"); // RIGHT! 
    #else 
    std::ifstream file("..\test.dat"); // WRONG! 
    #endif 

    ... 
} 

記住,反斜槓( 「\」)在字符串被用來創建特殊字符: 「\ n」 是一個新行, 「\ b」 被一個退格,和「\ t」是一個製表符,「\ a」是一個「警報」,「\ v」是一個垂直製表符等等。因此文件名「\ version \ next \ alpha \ beta \ test.dat」被解釋作爲一羣非常有趣的角色。爲了安全起見,即使在使用「\」作爲目錄分隔符的系統上,也應該使用「/version/next/alpha/beta/test.dat」。這是因爲這些操作系統上的庫例程會交替處理「/」和「\」。

當然,你可以使用「\\ version \\ next \\ alpha \\ beta \\ test.dat」,但這可能會傷害到你(有一個非零的機會,你會忘記其中一個「 「這是一個很微妙的錯誤,因爲大多數人沒有注意到它),它不能幫助你(在」/「上使用」\「沒有任何好處)。除了「/」更便於使用,因爲它適用於Unix,Plan 9,Inferno,所有Windows,OS/2等所有版本,但「\」僅適用於該列表的子集。所以「\」會讓你付出一些代價,並且你什麼也得不到:用「/」代替。

(來自C++ FAQ Lite

相關問題