2014-01-20 114 views
-3

我有一個txt格式的列表。我需要創建一個鏈表,並在其中放置文件每一行的每個數據。 我寫了一段代碼,但在運行後,Dos停止工作(「程序停止工作......」)。 誰能告訴我錯誤在哪裏?鏈接列表 - DOS錯誤

struct node 
    { 
     string data; 
     node *pas; 
    }; 

int main() 
{ 
    struct node *koke; 
    struct node *tmp; 
    koke = NULL; 
    string CH; 
    ifstream infile; 

    infile.open ("Liste_1.txt~"); 

    tmp = new node; 
    tmp = koke; 

    int i=0; 
    while(i<rr) //rr is defined as a constant 
    { 
     getline(infile,CH); 
     tmp->data = CH; 
     tmp = tmp->pas; 
     i++; 
    } 

感謝,

+0

你確定你的文件是'Liste_1.txt〜'嗎? – herohuyongtao

+0

是的,該文件是這樣命名的。當我對數組做同樣的事情時,一切都很好。這只是關於鏈接列表 – user3173029

+1

爲了記錄,你可能沒有使用「Dos」,那是你的程序崩潰。如果你真的使用「Dos」,那麼,我爲你感到抱歉:) – SirDarius

回答

0

首先分配給NULLkoke,然後分配給koketmp最後嘗試修改tmp/koke成員data。刪除tmp = koke;並在tmp->data = CH;後添加tmp->pas = new node;,它應該可以工作(但代碼通常非常糟糕)。

1

這裏有一些問題我已經找到:

tmp = new node; 
tmp = koke; 

哪個賦值語句? 您將一個動態分配的對象分配給tmp,然後重新分配tmp,從而丟失您的動態分配的對象。

while(i<rr) //rr is defined as a constant 
{ 
    getline(infile,CH); 
    tmp->data = CH; 
    tmp = tmp->pas; 
    i++; 
} 

您從不分配另一個節點。您將第一個值分配給tmp,然後移動tmp指針而不分配任何新節點。
順便說一句,tmp-pas的值是多少? (調試器會幫你回答這個問題。)

既然你對自己的鏈表有很大的困擾,我推薦你使用已經測試過的std::list

否則在某些示例中搜索「C++鏈接列表」的StackOverflow。

編輯1 - 讀取文件
你不應該使用常數文件中的行數。該文件是程序的外部文件,不能信任您在程序中定義的行數。
爲「C++文件結尾」搜索StackOverflow以瞭解如何讀取文件中的所有行,而不管大小如何。