2012-08-06 84 views
0

我正在研究這個函數的讀取。我使用的main在文件I/O中沒有問題,它連接正常,關閉,文件也可以。但是,在閱讀結束時,我正在發生分段錯誤。我已經嘗試打印出來進行測試,並且錯誤正在讀取最後一行。它完成讀取最後一行字符串a,然後x,然後in.good()也成爲錯誤。我試過重置in.clear(),如果in.good變成false,則設置字符串a="";。沒有任何工作。C++,讀取文件,分段錯誤

read(istream& in){ 
    string a; 
    int x; 
    in>>a; 
    while(in.good()){ 
     in>>x; 
     char *ch; 
     strcpy(ch, a.c_str()); 
     Word cwd(ch); 
     anObject.add(cwd,x); 
    } 
} 
+0

哪一位已設置? 'badbit,eofbit或failbit'?這可能會給你一個好主意,接下來你需要看看。 – Aesthete 2012-08-06 02:10:40

回答

8

你看段錯誤,因爲你不ch分配空間,然後你試圖將一個字符串超過它複製。 ch是一個未初始化的內存地址,不屬於你。

你需要爲字符串分配空間:

char *ch = new[(MAX_SIZE + 1) * sizeof(char)]; 

但爲什麼你需要這裏char *?請注意,如果您必須有C字符串,則您總是可以傳遞a並使用a.c_str()。我不確定Word是什麼,或者它是否需要它自己的字符串副本,但是您可以使用:Word cwd(a.c_str())

+0

同意。爲什麼需要一個cstring? – texasbruce 2012-08-06 02:14:37

+3

如果我在C++程序中使用'malloc'來捕獲任何人,我會用他們自己的程序清單將他們打死:-) – paxdiablo 2012-08-06 02:30:40

+0

感謝您的幫助。我不得不在學校的最後一個任務中創建這個Word類,但是沒有必要的字符串構造函數,或者不能直接使用a.c_str()函數返回我的Word類沒有的const char *。 – teamaster 2012-08-06 02:47:05

0

看來你沒有爲char *ch分配內存。當你定義這個變量時,它是一個隨機值。編寫隨機存儲器會在清理內存時(手動或自動返回函數)破壞內存並導致段錯誤。