2012-05-30 30 views
5

Bazen Bu hata ayıklama modunda benim Qt projesini (image) çalıştıran hata "ayıklama onaylama işlemi başarısız" olsun. Nerede hata yaptığımı bilmiyorum çünkü derleyici hiçbir şey söylemiyor ve hatayı bulmak için ne yapacağımı bilmiyorum. Qt Creator 2.4.1, Qt 4.8.1 kullanarak Windows Vista altındaayıklama onaylama işlemi başarısız: _CrtIsValidHeapPointer (pUserData)

Ben programı. Bence burada sorun (

void runFunction() 
{ 
    configure_Scanning(...); 

    while(...) 
    { 
     // do something 
     scanFunction(); 
     // do something 
    } 
} 

ve bu benim "suçlu gösterdiğini" fonksiyonudur:

Programım bir lazer cihazından bazı bilgileri okumak ve buna benzer bir kod ile bir dosyaya kaydetmek zorundadır Fikir ben fro (çift yönlü tarama 2D matrisinde bilgileri kaydetmek için yapmalarıdır: linea ve lineB başlangıçta iki boşluk QString vardır)

void scanFunction() 
{ 
    file.open(); 

    data = getDataFromDevice(); 

    if(flag) 
    { 
     if(QString::compare(lineB,"")!=0) 
     { 
      QTextStream out(&file); 
      out << lineB << endl; 
      lineB = ""; 
     } 
     lineA.append(data+"\t"); 
    } 
    else 
    { 
     if(QString::compare(lineA,"")!=0) 
     { 
      QTextStream out(&file); 
      out << lineA << endl; 
      lineA = ""; 
     } 
     lineB.prepend(data+"\t"); 
    } 

    file.close(); 
} 

m -X ile + X ve viceversa, Y ise belirli bir hedefe gider. lineA (-) - (+) okumasını hafızaya alır; satır B (+) - (-) okumayı hafızaya alır. Tarama yönü değişir, ben dosyaya Linea (veya lineB) yazıp ben tarama işlemine devam zaman.

Ne dediğimi anlıyor musunuz? Bana bir çözüm önerebilir misiniz? Benim İngilizce için

Teşekkür ve üzgün: P

+2

tık diyor gibi, programı debug. Ardından çağrı yığınını kontrol edin veya bu soruya ekleyin ve neyin yanlış gittiğine dair daha iyi bir fikir edinmelisiniz. Bir sidenote'de, bir dosyayı sürekli olarak açıp kapamanız muhtemelen gerekli değildir ve bazı ek yüklere neden olur. – stijn

+0

Her adımda bir dosyayı açıp kapamanın en iyi strateji olmadığını biliyorum, ancak beklenmedik kesintilerde veri kaybını önlemek için bunu yapmak zorundayım. –

+0

, 'flush()' ın yaptığı şey değil mi? Ben kodu 'File.Open()' ve 'dosya.close eklerseniz – stijn

cevap

10

_CrtIsValidHeapPointerUserData hata ayıklama yığın denetleyici tarafından fark edilir bir yığın bozulması, sahip oldukları anlamına gelir. Herhangi bir bilgiyi silinen dinamik nesneye yazabilen herkesten şüphelenmek. Ve evet, yeniden oluşumu üzerinde immideately değil, sonraki bir sonraki bellek ayırma/ayrılma işleminde gerçekleştirilecek sonraki yığın kontrolünde yığın düzeltmesi alırsınız. Ancak, tek dişli uygulamalarda bir çağrı yığını tarafından kolayca izlenmelidir. iletişim Yeniden Dene

+0

"Benim" Qt Creator uygulamasının hata ayıklayıcısını çalıştırmama izin vermediğini söylemedim. Bu yüzden çalışma zamanında herhangi bir hatayı kontrol edemiyorum. Bana ödevi nasıl kontrol edeceğimi açıklar mısınız? –

+0

Gerçekten söyleyemiyorum.Kaba kuvvet yolu akıllı işaretçi sınıfları ile işaretçiler TÜMÜNÜ değiştirmek ve sorun algılandığında bunları hata iletilerine ayarlamaktır. – Forgottn

+0

İyi fikir! Ama ... sorun tespit edildiğinde bilmiyorum. Her neyse, bu şekilde deneyeceğim. Fikir için teşekkürler! –

İlgili konular