以下のプログラムは、ソートされた単一リンクリストから重複を削除するために使用されます。このコードは、オンラインIDEでガベージ値を示します。しかし、私はその行にコメントします。オンラインIDEとローカルIDEで異なる結果を出す同じコード
delete curr;
プログラムは、オンラインIDE自体で正常に動作します。ここに私が書いた機能があります。コードの他の部分は、オンラインジャッジによって明確に定義されています(私ではありません)。
また、コメントなしのコードcurrを削除します。は、ローカルIDE(コードブロック)で正常に動作します。
FULL PROGRAM:http://ideone.com/9bHab0
は、なぜ私はゴミ値を得るのですか?
Node *removeDuplicates(Node *root)
{
// your code goes here
struct Node* curr = root,*prev = NULL;
while(curr)
{
if(prev==NULL)
prev = curr;
else if(curr->data!=prev->data)
prev = curr;
else
{
prev->next = curr->next;
delete curr;
curr = prev->next;
}
}
return root;
}
EDIT:一つは、場所削除されたポインタを見ることができ、すぐに再割り当てされます。したがって、ここにぶら下がっているポインタはありませんでした!
デバッガで実行してみましたか? –
あなたは 'new'であなたの' Node'インスタンスを割り当てますか? *それらのすべて*?彼らのデストラクタは何をしていますか? –
これは、C( 'struct Node * curr')とC++(' delete curr')コードがうまく混ざり合っています。あなたは、呼び出し元がC++で、インスタンスを割り当てるために 'operator new'を呼んでいますか? – IInspectable