Pytanie : Dlaczego I (dlaczego) umożliwiać rozsypisko pamięć przydział wśród CWinThread-czerpać klasa nić funkcja przywoływać bezpośrednio od InitInstance?

Ten pytanie przekształcać się w "móc ty the objaw błąd" problem. - The pierwszy komentarz (od) pierwszy mieć próbka program dołączać, więc jeżeli przedmiot mieć teoria jeśli chodzi przedmiot móc, szybki modyfikacja the próbka program musieć ono łatwo enough.

I tworzyć pracownik nić funkcja zawijać CWinThread-czerpać przedmiot. (nazwany ThreadProcObject) -

Within the niciany rutyna (przywoływać bezpośrednio od InitInstance - tak Biegać () i the wiadomość pompa zaczynać w górę) próba niektóre rozsypisko pamięć zrobić (widzieć przykład program rutyna Run1 () lub Run2 ()) i, gdy the błąd zdarzać się, _malloc_debug () przywoływać wśród the rozsypisko operator nowy () rutyna i wracać NULL.

At mały, przywoływać być the objaw w mój orignal program, che I mieć mój w the dołączać sample.

I oryginalnie myśleć że co zdarzać się być że między the czas the CWinThread-czerpać przedmiot konstruktor przywoływać i the niciany rutyna dzwonić InitInstance (nutowy, zanim Run1 () lub Run2 () przywoływać, the nić iść pierwszy czekanie na "zadanie pierwszy przygotowywać" wydarzenie), i że niektóre część the (rozsypisko?) kontekst zmiana, tak efektywnie obezwładniać the operator nowy rutyna i tak tak móc rozwiązywać niektóre odpowiedni Afx…? rutyna the rozsypisko kontekst, ale/>
pojawiać się wrong

An egzamin the InitInstance () wezwanie ThreadProc (), który rutyna WaitForMultipleObjects-delayed wezwanie Run1 () lub Run2 () i the pamięć przydział wezwanie w Run1 () lub Bieg (2) musieć dzwon jeżeli 2) mieć jakaś teoria jeśli chodzi jak _malloc_dbg () móc NIEOBOWIĄZUJĄCY jeżeli odpowiedni rozsypisko pamięć exists.

I nagradzać the punkt jeżeli nieobowiązujący właściwie móc the problem (widzieć the komentarz właściwie i swój dołączać program) wśród the dołączać program - i jak ono zdarzać się w the pierwszy place.

Odpowiedź : Dlaczego I (dlaczego) umożliwiać rozsypisko pamięć przydział wśród CWinThread-czerpać klasa nić funkcja przywoływać bezpośrednio od InitInstance?


Jeżeli the oryginalny program pracować dobrze, then który być dobry.  Ty móc dobry dosyć samotny, ale I wciąż myśleć że ty musieć twój niciany logika więcej przedmiot - ukierunkowywać gdy I wspominać.  Jako ono stać, ono być ciężki ciężki jak rzecz pracować od twój kod: ty mieć UI mieszać z niższy poziom funkcjonalność.  Niciany klasa modularizes data tak dużo lepiej i robić dla łatwy czytanie, hence debugging jeżeli tak dużo musieć potrzebować przy opóźniony data.
Ale hej, ono być twój projekt…:)
>> ty mieć jakaś pomysł dlaczego, gdy ono kończyć the "x" guzik, the debugger wskazywać pamięć przeciek?
I widzieć the następujący po tym jak I zaczynać the debugger, naciskać the początek guzik, then zamykać the app:

Wykrywać pamięć przeciek!
Damping przedmiot - >
{542} normalna blok przy 0x00DB16A0, 16 bajt tęsknić.
 Dane: <>bsp;  &nbsp; &nbsp &nbsp; &nbsp; > A8 15 DB 00 CD CD CD CD CD CD CD CD CD CD CD CD
{541} normalna blok przy 0x0003FBE8, 32 bajt tęsknić.
 Dane: <>bsp;  &nbsp; &nbsp &nbsp; &nbsp; > A0 16 DB 00 00 00 00 00 00 00 00 00 00 00 00 00
{526} normalna blok przy 0x00DB3FA0, 28 bajt tęsknić.
 Dane: <>bsp;  &nbsp; &nbsp &nbsp; &nbsp; > 00 00 00 00 CD CD CD CD CD CD CD CD E8 FB 03 00
Przedmiot usyp zupełny.

W Ten Sposób I dodawać the następujący CWinThreadTestApp:: InitInstance ():

 _CrtSetBreakAlloc (542);
 _CrtSetBreakAlloc (541);
 _CrtSetBreakAlloc (526);

Teraz gdy the debugger zaczynać, I natychmiast dostawać debug przerwa na the linia:

OpRequestQ = (queue*)
    nowy kolejka; // [MAX_CONCURRENT_POLLS+1];

w ten sposób, dodawać

jeżeli (OpRequestQ) deleatur OpRequestQ;

twój destructor:)  _CrtSetBreakAlloc naprawdę być wielki funkcja rozległy use gdy konieczny:)
Inne rozwiązania  
 
programming4us programming4us