[COLOR="Blue"]void operator delete[/COLOR](
[COLOR="Blue"]void[/COLOR] *pUserData
)
{
_CrtMemBlockHeader * pHead;
RTCCALLBACK(_RTC_Free_hook, (pUserData, 0));
[COLOR="Blue"] if[/COLOR] (pUserData == NULL)
[COLOR="Blue"]return[/COLOR];
_mlock(_HEAP_LOCK); [COLOR="DarkGreen"] /* block other threads */[/COLOR]
__TRY
[COLOR="DarkGreen"] /* get a pointer to memory block header */[/COLOR]
pHead = pHdr(pUserData);
[COLOR="DarkGreen"]/* verify block type */[/COLOR]
--тут---> [COLOR="Red"]_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));[/COLOR]
_free_dbg( pUserData, pHead->nBlockUse );
__FINALLY
_munlock(_HEAP_LOCK); [COLOR="DarkGreen"]/* release other threads */[/COLOR]
__END_TRY_FINALLY
[COLOR="Blue"] return[/COLOR];
}
Проблема при запуске.Помогите, пож-та, разобраться.
Сама ошибка происходит здесь:
Код:
та часть программы где возникает ошибка работет с текстом в Edit Box'e, добавляет строчку о потраченном времени (счетчик секунд) к выводимой матрице чисел, которая уже хранится в pBuffer:
Код:
wsprintf(s,("вы закончили за %8d секунд"),iCounter);
lstrcat(pBuffer,s);
[COLOR="DarkGreen"]/* определение размера строки */[/COLOR]
txt_length=lstrlen(pBuffer);
SetFilePointer(hDest,0,0,FILE_BEGIN);
[COLOR="DarkGreen"]// запись в файл текста [/COLOR]
WriteFile(hDest,pBuffer, txt_length+1, &written, NULL);
[COLOR="DarkGreen"]/* закрытие файла */[/COLOR]
CloseHandle(hDest);
[COLOR="DarkGreen"]//заходит в void operator delete[/COLOR]
[COLOR="DarkGreen"]/* удаление динамически созданного элемента */[/COLOR]
[COLOR="Red"]delete filename[/COLOR];
lstrcat(pBuffer,s);
[COLOR="DarkGreen"]/* определение размера строки */[/COLOR]
txt_length=lstrlen(pBuffer);
SetFilePointer(hDest,0,0,FILE_BEGIN);
[COLOR="DarkGreen"]// запись в файл текста [/COLOR]
WriteFile(hDest,pBuffer, txt_length+1, &written, NULL);
[COLOR="DarkGreen"]/* закрытие файла */[/COLOR]
CloseHandle(hDest);
[COLOR="DarkGreen"]//заходит в void operator delete[/COLOR]
[COLOR="DarkGreen"]/* удаление динамически созданного элемента */[/COLOR]
[COLOR="Red"]delete filename[/COLOR];
С чего собственно вы полезли вызывать оперетор delete - при том что не видно - где выделяется память? Как вариант - это собственно и есть ошибка - вы пытаетесть очистить память которую не выделяли.
Каждый раз когда зависает буду еще больше памяти выделять
При этом не помешает посмотреть в диспетчере задач число дескрипторов (закладка "Быстродействие") до запуска программы и после выхода из программы. Если память отъедается и не возвращается - вы это увидете по увеличению их числа при запуске и неуменьшении после.
как ни странно...
память возможно освобождается за счет сборщика мусора. Ряд компиляторов такое допускает. Но вот попыток освобождать ту память, которые не выделяли - не прощает практически никто. от этого и ошибка
Насколько я помню,при завершении процесса Windows освобождает всю выделенную им память,ибо она этому процессу принадлежит,и не может после его смерти память остаться ничьей.То же и с дескрипторами–они автоматически закрываются