Доброго времени суток! Пытаюсь научится выделять динамически память с помощью winapi.
{
HANDLE hHeap = GetProcessHeap();
TCHAR *strName = (TCHAR*)HeapAlloc(hHeap, 0, 1 * sizeof(TCHAR));
lstrcpy(strName, _T("Hello"));
MessageBox(0, strName, 0, 0);
HeapFree(hHeap, 0, strName);
}
Проблема в том, что я не понимаю, почему этот код нормально работает.. Вроде как я выделяю память под 1 символ, а заношу туда 5 символов(это не включая завершающего нуля), более того, даже если я вместо 1 * sizeof(TCHAR) напишу 0, оно тоже работает и выдает полноценное Hello. Объясните, как это работает? Есть ли другие, не касающиеся темы, косяки в данном коде? Спасибо.
HeapAlloc выделяет и возвращает указатель на блок памяти размером в 1 TCHAR. Но физическая память (или даже виртуальная) на этом не заканчивается. Ваш lstrcpy использует ее, но "без спроса". Скорее всего, там ничего важного не оказалось и поэтому программа "работает". Если выделить еще один блок памяти сразу после первого, то возможно, что lstrcpy его перезапишет и тогда код, использующий этот второй блок скорее всего будет работать неправильно, разве что только если вы не полагались на эту перезапись. Хотя, что такое "неправильно" - это очень большой вопрос! :)
Возможно, еще дело в том, что HeapAlloc выделяет блок достаточного размера, а скорее всего, большего.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Хочу связать си\с++ код с кодом pythonДля этого сделал решение в котором 2 проекта: 1 на плюсах, 1 на питоне
Есть ли способ отследить событие звонка Skype из своего приложения?
Здравствуйте люди добрые! Решаю задачку по плюсам, суть такая, что не могу написать специализацию шаблона функции - компилятор ругаетсяСуть...