我只是在試驗數據結構的基礎知識,並且對某些東西感到好奇。正如你可以在我的代碼中看到的那樣,在弄清p
指針之後,我決定刪除它。我刪除了P指針,我認爲它也會delete p->proximo
('proximo'是葡萄牙語'next'),但它並沒有明顯的表現。 Acesso 3(Access 3 in Portuguese)的結果爲0 22.在C++中,在指向某個類的指針被破壞之後,我是否可以使用新函數重新使用指針
所以首先,如果我刪除了指針,爲什麼我仍然可以連接到指針p->proximo
?好吧,但因爲它沒有,這是一件好事,這意味着我現在可以刪除東西。於是我決定把這個22的值交給第一個點頭。所以我不會破壞列表中的節點。正如你可以在第28行中看到的那樣,我嘗試使用p = p->proximo
。但它不起作用。當然它沒有。我刪除了指針。有沒有什麼辦法可以重新創建第一個指針,這樣我就可以修復這個列表,所以第一個節點的值是22?我試過
p = new IntNode();
p = p->proximo;
但它也失敗了。可能是因爲現有的下一個節點可能?
我欣賞任何你非常多的幫助
代碼:
#include <iostream>
using namespace std;
class IntNode{
public:
IntNode(){
proximo = 0;
}
IntNode(int file, IntNode *next = 0)
{
number = file;
proximo = next;
}
int number;
IntNode *proximo;
};
int main()
{
IntNode *p = new IntNode(15);
cout << "Acesso 1: " << p->number;
p->proximo = new IntNode(22);
cout << endl << "Acesso 2: " << p->number << " " << p->proximo->number;
delete p;
cout << endl << "Acesso 3: " << p->number << " " << p->proximo->number << endl;
p = new IntNode(5);
cout << endl << "Acesso 4: " << p->number << " " << p->proximo->number << endl;
p = p->proximo;
cout << endl << "Acesso 5: " << p->number << " " << p->proximo->number << endl;
delete p->proximo;
cout << endl << "Acesso 6: " << p->number << " " << p->proximo->number << endl;
return 0;
}
您需要閱讀[析構函數](http://en.cppreference.com/w/cpp/language/destructor)。 – 2013-02-27 09:21:07
使用刪除的指針就像[保持酒店房間的鑰匙](http://stackoverflow.com/a/6445794/597607)。 – 2013-02-27 09:26:12
你可以使用'valgrind'這樣的工具來檢測這個。 – 2013-02-27 10:34:30