編輯:我也不會介意知道這是否只是太曖昧讓你瞭解和或者尋找什麼是錯的,我一知道這與代碼沒有直接關係,因爲當我即將退出函數時發生更改,而不是在實際的「代碼」期間發生。所以我希望這已經足夠,不管我是否需要添加更多。先謝謝你!指針似乎沒有明顯的原因重新設置
我想做一個簡單的(單向)鏈接列表,我必須自己做,不使用STL或任何其他已經制作的動態容器。我已經做了一個簡單的,但我似乎有一個問題,我根本無法包裹我的頭。每當我在列表中創建一個新節點(我總是返回列表的第一個節點,以防它已被更改,我不使用「哨兵」或「虛擬」節點)新節點是好的直到我到達程序中的某個點時,它將自己重置到我介紹的第一個節點。
要儘量保持我的帖子儘可能乾淨,我會插入更少的代碼和更多的「功能」或模式,但如果它不夠,我會添加更多。
這裏是它如何工作的:
我的節點項目
struct Node { // simplified example
string type; //can be ignored
int ap_nr; // I sort by apartment number
int sum; // can also be ignored
Node *next;
};
在主我初始化我的第一個節點是「假的」節點(ap_nr = -1,其他ap_nr不能爲負)。
int main()
{
int command = 1; // used for loop
Node *begin; // head of my list
begin = new Node;
begin = create_node(); // initialize
while (command != 0) // This is for work with a "handler", accesses different mechanics of the program, I don't know exactly how to explain in english
{
input_command(command, begin); // reads command, sends result to handler
}
return 0;
}
這是我輸入命令:
void input_command (int &command,Node *begin)
{
cout<<"Option #"; cin>>command;
input_validation (command, begin);
}
而我處理,我使用ATM的唯一部分:
void input_validation (int command, Node *begin)
{
if (command == 1 trough 15) // pseudo code
execute (command)
}
後,我將節點添加到列表中,我用調試跟蹤它,第一個保持原樣,但第二個節點(我在第一個節點之前添加它並返回新的「開始」),起初沒關係(有一個新的內存位置和new_begin->next = old_begin
但在I退出ìnput_command
結構它重置)
* 這裏是input_command結構和程序圖:*
主: - 初始化 '假' 節點/進入菜單環 - >前進到input_command。
UI: - 輸入命令 - >讀取命令 - >驗證 - >發送到處理程序。
列表: - 增加了慾望節點「列表」(沒有實際上本身的列表左右,剛剛掛節點) - >返回第一個節點。 第一個節點是確定(有新的地址,在舊節點)
返回到UI: - >輸入命令(下架)和復位(我的意思是,不管什麼節點I添加,它成爲我添加的第一個節點。假設我介紹1到10號公寓,它只記得「1」)。
AM我錯過了什麼?在我的設計中是否有邏輯錯誤? 你需要更多的代碼驢嗎? 只要告訴我要補充什麼,我意識到這有點模糊。
注:現在我只能我的主要節點之前添加節點,我不會強調任何新的,直到我做這項工作正常,只要我的設計是不是問題的一部分,我贏了也不會改變,但如果不好,我會欣賞筆記和建議。
這是add_node功能的唯一實現部分:
Node *add_node (Node *begin,string type, int sum, int ap_nr) // Node begin e primul nod din lista, trebuie mereu plimbat cu toate functiile pe lista
{
// if first node is dummy node
if (begin->ap_nr == -1)
{
begin->type = type;
begin->ap_nr = ap_nr;
begin->sum = sum;
begin->next = 0;
return begin;
}
// else create new node and insert it in sorted position
else
{
// if node should be inserted before first node (begin)
if (ap_nr <begin->ap_nr)
{
Node *cursor;
cursor = new Node;
cursor->ap_nr = ap_nr;
cursor->type = type;
cursor->sum = sum;
cursor->next = begin;
return cursor;
}
}
請將來源添加到input_command函數中。我懷疑你沒有傳遞對它的引用,所以開始指針永遠不會被修改。 – 2012-04-02 12:03:54