2016-02-11 70 views
-1
#include <iostream> 
using namespace std; 
struct Node{ 
int data; 
Node* next; 
}; 
void deletelist(Node*&head) 
{ 
Node* temp=new Node; 
temp=head; 
while(head!=NULL) 
{ 
head=head->next; 
delete(temp); 
temp=head; 
} 
} 
int main() { 
Node aman={1,NULL},manjot={2,&aman},sima={3,&manjot},jasbir={4,&sima}; 
Node* head=&jasbir; 
deletelist(head); 
return 0; 
} 

爲什麼這是顯示運行時錯誤(delete(temp);函數在這裏不工作,但爲什麼)?鏈接列表中的運行時錯誤

+0

你沒有合理分配,但解除分配。 – Ajay

+0

您試圖取消分配(即刪除)變量,該變量在第一個地方從未分配(即新)。 – gjha

+0

順便說一句,你不需要'deletelist',因爲所有的變量一旦範圍結束就會被銷燬。 – gjha

回答

-1

爲您工作的代碼。特別注意兩個主要範圍。

#include <iostream> 
using namespace std; 
struct Node{ 
int data; 
Node* next; 
}; 
void print(Node*head) 
{ 
while(head!=NULL) 
{ 
    std::cout<<head->data<<'\n'; 
    head=head->next; 
} 
} 
int main() { 
    Node* head; 
    { 
     Node aman={1,NULL},manjot={2,&aman},sima={3,&manjot},jasbir={4,&sima}; 
     head=&jasbir; 
     print(head); 
    } 
    { 
     Node aman={10,NULL},manjot={20,&aman},sima={30,&manjot},jasbir={40,&sima}; 
     head=&jasbir; 
     print(head); 
    } 
return 0; 
} 

example on coliru

+0

你已經寫了兩次相同的東西,並沒有刪除功能 –

+0

是的。這是爲了表明範圍的含義。您不需要刪除從未使用'new'分配的內容。你已經在編寫範圍安全的代碼,所以不用擔心'delete'。 – gjha

+0

好吧,我明白了。謝謝! –