Bir Huffman kodlayıcı uygularım. Huffman ağaçları öncelik sırasını kullanarak aşağıdan yukarıya inşa edilmiştir. Diğer iki düğümün işaretçileri olan basit bir düğüm sınıfım var. ağacı oluşturur döngü:düğüm döngü içinde kendi kendine referans döngü
while(q.size() > 1)
{
huffnode n1 = q.top();
q.pop();
huffnode n2 = q.top();
q.pop();
q.push(huffnode((char)0, n1.freq+n2.freq, &n1, &n2));
}
döngü sona kalan Düğüm ağacı köküdür.
Bu kod yeterince masum görünmüyor, fakat benim test girişimde, kökü sağ çocuğun, kuyruğundan atılan iki düğüm yerine kökün sol çocuğunun kendisine ve sol çocuğuna işaret ettiği bir ağaç veriyor. Kuyruğun doğru şekilde sıralandığından emin oldum.
Neler oluyor n1 ve n2, hata ayıklayıcısında görüldüğü gibi her zaman aynı adrese sahip yerel değişkenlerdir. Yeni bir node itildiğinde, bu adreslere işaret eder. Bu düğüm daha sonra atılırsa, kopyası, bir tanesi işaret ettiği adreslerden birine girer, o zaman kendini işaret eder.
Bunu nasıl düzeltmeliyim? N1 ve n2 işaretçileri yapamıyorum çünkü bu nedenle 0 (bir) bir const başvuru döndürüyor ve bir const referansına ya da const işaretçisine topun sonucunu atamak, sıra değişmez hale getirdiğinden, const
olması gerekiyordu.
adresleri 've n1, & 'while' döngü kaldıktan sonra n2' geçersiz kılınır. Sarkan işaretçilerle uğraşıyorsunuz (ne yaparsanız yapın). Bu durumda –
, o zaman neden döngü sona erdikten sonra kök göstergelerini takip edebilirim? – BenK