|
|
|
Утечка памяти в "OnDrow"
|
|||
|---|---|---|---|
|
#18+
Привет! Срочно нужно!!! У меня проблемма: при прорисовке на формочке графика функции(рисую по таймеру)где-то течет память, и никак не удается отловить! При чем мной замечен интересный(на мой взгляд) момент: при комментировании вызова OnDrow в OnTimer утечка пропадает. Если же вызов не комментировать, а закомментировать тело OnDrow(полностью) утечка остается. Может кто-то знает, с чем это может быть связано, или, хотя бы, как это можно попытаться устранить??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2005, 18:22 |
|
||
|
Утечка памяти в "OnDrow"
|
|||
|---|---|---|---|
|
#18+
Уж не буду говорить, что ошибка скорее всего в 17 строке КОД ГДЕ?! ________________________________________________________ Глюк - это высокоорганизованная система не поддающихся определению частиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2005, 19:49 |
|
||
|
Утечка памяти в "OnDrow"
|
|||
|---|---|---|---|
|
#18+
Не знаю, насколько поможет код, но: void CVoiceManipulationView::OnTimer(UINT nIDEvent) { OnDraw(GetDC());//вызов злополучной OnDrow //change text in static text CMainFrame *mf = (CMainFrame*)AfxGetMainWnd(); CStatic *Static = (CStatic *)mf->m_wBar.GetDlgItem(IDC_Shiftedit1); char Str[256]; itoa(int(G_BaseToneFreq), Str, 10); Static->SetWindowText(Str); // CView::OnTimer(nIDEvent); } И сама OnDrow: void CVoiceManipulationView::OnDraw(CDC* pDC) { if (G_SharedData) { G_SharedData = false; CRect rc; rc.left = 0; rc.top = 0; rc.right = 520; rc.bottom = 250; DrawGraph((float *)&G_SpectreIn, G_Len, pDC, rc);//функция отрисовки графика rc.left = 0; rc.top = 260; rc.right = 520; rc.bottom = 500; DrawGraph((float *)&G_SpectreOut, G_Len, pDC, rc); G_SharedData = true; } } Ну, и если на то пошло, сама функция отрисовкиграфика: void DrawGraph(Ipp32f *Array, int n, CDC *DC, CRect rect) { DC->FillSolidRect(rect.left, rect.top, rect.Width(), rect.Height(), RGB(0, 0, 0)); int i; int H = rect.Height()/2; //Ищем максимум float max = 0; float min = 0; float current; for (i = 0; i < G_Len; i++) { current = Array ; max = (max > current) ? max : current; min = (min < current) ? min : current; }; max = (max > -min) ? max : -min; max = max + 0.1 * max; if (!max) { max = 1; }; //create pen for draw CPen *pen = new CPen(); pen->CreatePen(0, 1, RGB(150, 200, 255)); CGdiObject *temp = DC->SelectObject(pen); // DC->MoveTo(rect.left, rect.top + H - 1); for(i = 0; i < n/2; i++) { DC->LineTo(rect.left + i - 1, rect.top + H - H * Array / max + 2); }; //delete pen after using DC->SelectObject(temp); pen->DeleteObject(); delete pen; } Но повторяю, самое интересное то, что при комментиовании вызова OnDrow утечка пропадает, а если закомментировать тело OnDrow опять появляется!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2005, 21:10 |
|
||
|
Утечка памяти в "OnDrow"
|
|||
|---|---|---|---|
|
#18+
А если GetDC сделал, то какой-нибудь ReleaseDC не надо делать??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2005, 21:30 |
|
||
|
Утечка памяти в "OnDrow"
|
|||
|---|---|---|---|
|
#18+
Как все, оказывается просто))) Спасибо, а то прямо-таки погибал! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2005, 00:24 |
|
||
|
Утечка памяти в "OnDrow"
|
|||
|---|---|---|---|
|
#18+
OnDraw() нельзя так просто вызывать. Ну и про ReleaseDC тебе уже сказали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2005, 10:56 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=57&tid=2033428]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
84ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 405ms |

| 0 / 0 |
