altsimpstr.h - Fehler beim Neustart einer Schleife



  • Hi Leute

    Ich habe ein Programm geschrieben, das einen Testalgorithmus für einen Datenträger, der über ein HF - Feld geschrieben und gelesen wird, auf seine Datensicherheit testet.

    Es gibt Datenträger in drei Größen: 2k, 8k, 32k

    Mein Test schreibt den Datenträger voll und alle Daten in eine Textdatei. Danach wird der Datenträger ausgelesen und die gelesenen Daten auf Gleichheit mit den Originaldaten überprüft...

    Mein Problem:

    Mit den 2k und 8k Datenträgern funktioniert meine Testschleife (bei der man die Anzahl der Testdurchläufe eingeben kann) problemlos.
    Sobald ich den 32k Datenträger teste und am Ende meines Durchlaufs angekommen bin zählt der Counter -1 und die Schleife soll neu beginnen. Stattdessen kommt nach dem Sprung an den Schleifenanfang sofort ein Ausstieg mit dem Verweis:

    void Release() throw()
    	{
    		ATLASSERT( nRefs != 0 );
    
    		if( _InterlockedDecrement( &nRefs ) <= 0 )
    		{
    			pStringMgr->Free( this );
    		}
    	}
    

    Datei: atlsimpstr.h

    Hinweis: Ich arbeite mit mehreren sehr großen Arrays [bis 160000].



  • Zeig doch mal deine Schleife. Ich tippe ja darauf, daß du ans Limit deiner Zählvariable angelangt bist und nun in ungültigen Speicher weitergeschrieben hast (nimm lieber unsigned long oder long long als Zählvariable).



  • an dem kann's nicht liegen, die ist z.B. nur3 und wird am Schluss wirklich nur einmal decrementiert


  • Mod

    Der Code den Du zeigst eigt aber eher ein Problem mit dem Handling Deiner COM Objekte. Es wird ein Objekt freigegeben auf das bereits keine Referenzen mehr existieren. Das dürfte nicht sein!


Anmelden zum Antworten