2014-11-03 90 views
-1

我試圖編寫一個函數,該函數需要一個指向頭節點的指針,然後使用遞歸來反轉節點之間的鏈接方式。訪問衝突寫入位置C++鏈接列表

下面是我的功能。

void reverseRec(digits *&head){ 
digits *temp = head; 
if(temp->next = NULL){ 
    head = temp; 
    return; 
    } 
reverseRec(head->next); 
digits * a = temp->next; 
a->next = temp; 
temp->next = NULL; 
} 

,並調用函數如下:

int main(){ 
    digits * head = new digits(); // pointer that points to head of the node 
    head = NULL; 
    insert(head, 5, 1); 
    insert(head, 6, 2); 
    insert(head, 1, 3); 
    insert(head, 7, 1); 
    delList(head, 1); 
    reverseRec(head); 
} 

,如果有幫助,我試圖用一個正常換向功能使用while循環,它原來就好了,我的代碼是這樣的:

void reverse(digits *&head){ 
    digits * prev, * current, * next; 
    current = head; 
    prev = NULL; 
    while(current!= NULL){ 
     next = current->next; 
     current->next = prev; 
     prev = current; 
     current = next; 
    } 
    head = prev; 
} 

我是新的C++,我得到這些訪問衝突寫入位置「的錯誤很多,而且到現在爲止,我不知道它是什麼(我一般用的代碼修補,直到它得到固定,但我從來沒有真正的站在是什麼原因造成的)。

抱歉,這真的是一個新手問題,這些訪問衝突寫入位置錯誤是什麼?我的代碼有什麼問題?

+0

嘗試調試'reverseRec'函數。它不會做你期望的事情,因爲它不會改變'頭部'。首先列出兩個項目,以便更容易理解正在發生的事情。 – wimh 2014-11-03 11:59:45

+0

@Wimmel爲什麼?我通過參考通過了嗎?或者算法錯誤? – Rei 2014-11-03 12:28:26

+0

你在'temp = head'之後做'head = temp',這樣就不會改變'head'。在if語句之後,您不會更改'head'。所以它在任何地方都不會改變。 – wimh 2014-11-03 12:48:38

回答

1

當您嘗試寫入或讀取未經您的程序授權的內存區域時,會發生訪問衝突錯誤。你能否提一下你在哪裏得到這個訪問違規錯誤?

您實際上是在您的IF()條件下方程式Temp-> NULL旁邊。你可以嘗試改變..

if(temp->next = NULL) 

if(!temp->next) 

而且在main(),改變你的頭分配。

head ->next= NULL;