2013-07-17 93 views
0

當我嘗試運行我的程序時,它崩潰了開始的權利。問題是我從文件輸入,我可以寫入文件罰款。有人可以解釋爲什麼這段代碼不起作用嗎?程序在試圖打開.txt文件時崩潰

StringList::StringList() 
{ 
    pTop=NULL; 
    pBottom=NULL; 

    ifstream in; 
    in.open("read.txt"); 

    StringListNode * pCurrent; 
    pCurrent = new StringListNode; 
    pCurrent = pTop; 

    while(!in.eof()) //reads it till the end of file 
    { 
    in >> pCurrent->data; 
    pCurrent = pCurrent->pNext; 
    } 
    in.close(); 
} 

此輸出到文件工作正常。我想我會包括它。

StringList::~StringList() 
{ 
    ofstream out; 
    out.open("read.txt"); 

    StringListNode * pCurrent; 
    pCurrent = new StringListNode; 
    pCurrent = pTop; 
    while(pCurrent != 0) 
    { 
    out << pCurrent->data << endl; 
    pCurrent = pCurrent->pNext; 
    } 
    out.close(); 
} 

回答

1

pCurrent = pTop;爲什麼在這裏指定這個?這使得pCurrent空指針。請刪除或修復。

我很困惑你的代碼:

pCurrent = new StringListNode; // Allocate new memory and point at it 
pCurrent = pTop; // Make pCurrent point at same thing as pTop 

分配給pCurrent兩次。 pTop看起來像一個數據成員,也許你在構造函數中的意思是:

pCurrent = new StringListNode; // Allocate new memory and point at it 
pCurrent->pNext = nullptr; // Assign null to next pointer 
pTop = pCurrent; // Make pTop point at new memory 

和析構函數刪除pCurrent = new StringListNode;因爲它沒有做任何事情。

輸出時,您檢查pCurrent != 0,但您在閱讀時不檢查空值。可能pCurrent是空指針。請參閱Why is iostream::eof inside a loop condition considered wrong?。你的循環應該是:

while(pCurrent && (in >> pCurrent->data)) 
{ 
    pCurrent = pCurrent->pNext; 
} 
+0

真棒,謝謝你修復了我的崩潰問題,但它不顯示文件中的文本。 –

+0

請刪除'pCurrent = pTop;',你爲什麼要做這個任務? –

+0

啊,這讓我感到沮喪,無法比擬,它現在起作用。非常感謝。 –

相關問題