Вот моя программа порождает Heap Corruption. Полазив по инэту не нашёл ничего о том, как это повреждение кучи исправить. Зато родился новый вопрос: Отличаются ли malloc и HeapAlloc? В мой программе повсеместно используется HeapAlloc, который требует HeapFree для освобождения памяти. При этом если попробывать освободить память HeapAlloc при помощи free - генерируется ошибка. Т.е. эти функиции делают разные вещи. И ещё например _tcsdup позвращает строку выделенную при помощи malloc и если попробывать её освободить при помощи HeapFree - ошибка. Что лучше: malloc или HeapAlloc? P.S. В программирование под Windows я просто ламер
AlannY разные реализации хипа. качество маллока зависит от конкретной либС. Юзанье ХипАллок иногда позволяет слегка уменьшить размеры проги и с бряками попроще, но вобще он не оч быстрый.
Спасибо, теперь буду искать проблемы с HeapAlloc, которая у меня возвращает NULL. Кстати, не знаете такой реализации _tcsdup, что бы она использовала HeapAlloc?
Google rocks http://msdn.microsoft.com/en-us/library/aa366533(VS.85).aspx http://www.codeguru.com/cpp/w-p/win32/tutorials/article.php/c9535
AlannY Вот простенький "свой" _tcsdup: Код (Text): PTCHAR _tcsdup2 (LPCTSTR pszText, HANDLE hHeap) { int nBytes = (_tcslen (pszText) + 1) * sizeof (TCHAR); PTCHAR pszDuplicate = (PTCHAR) HeapAlloc (hHeap, HEAP_NO_SERIALIZE, nBytes); if (pszDuplicate != NULL) { memcpy (pszDuplicate, pszText, nBytes); } return pszDuplicate; } #define STRDUP(text) _tcsdup2 (text, GetProcessHeap ()) #define FREE_STRDUP(text) if ((text) != NULL) HeapFree (GetProcessHeap (), HEAP_NO_SERIALIZE, text) // Example: PTCHAR pszMsg = STRDUP ("SPOCK: 'CAPTAIN, MAY I SUGGEST A SHUTTLECRAFT.'"); if (pszMsg != NULL) { // ... use it FREE_STRDUP (pszMsg); } Но это наверняка не поможет с Heap Corruption. Один из методов поиска такой ситуации: http://msdn.microsoft.com/en-us/library/aa366708(VS.85).aspx