Добрый день.
Проблема: создаю диалог, на нем ListCtrl в режиме Report, кнопка. По кнопке такой код:
void CListMemTestDlg::OnButton1()
{
m_List.DeleteAllItems();
while (m_List.DeleteColumn(0)!=0);
for (int i=0; i<10; i++) m_List.InsertColumn(0, "col");
for (i=0; i<1000; i++)
{
int t = m_List.InsertItem(0, "itm");
m_List.SetItemData(t, i);
for (int j=0; j<10; j++) m_List.SetItemText(t,j,"12345");
}
// если включить эту строчку, утекает память
m_List.SortItems(CompareProc, 0);
}
int CALLBACK
CompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
if (lParam1>lParam2) return 1;
if (lParam1<lParam2) return -1;
return 0;
}
и память приложения, судя по Task Manager, растёт на 36-40К на каждое нажатие кнопки.
BoundsChecker молчит.
Я, конечно, понимаю, что если бы ошибка была в ListCtrl, это было бы давно известно.
Значит, это я что-то делаю неправильно. Но что?
Проблема решилась таким образом: заменил
while (m_List.DeleteColumn(0)!=0);
(примерно так было в MSDN), на
for (i=10; i>=0; i--)
m_List.DeleteColumn(i);
но всё-таки интересно, почему так.