Я немного расширил приведенный выше код:
#include <stdio.h>
#include <stdlib.h>
void main()
{
int temp = 0;
int *ptr = &temp;
printf("Before: %0X\n", ptr);
free(ptr);
printf("After: %0X\n", ptr);
getchar();
}
Если этот код скомпилирован Visual Studio 2010, в конфигурации отладки вызов free
инициирует сообщение «Ошибка отладки».Это сообщение об ошибке исходит от dbgheap.c:
/*
* If this ASSERT fails, a bad pointer has been passed in. It may be
* totally bogus, or it may have been allocated from another heap.
* The pointer MUST come from the 'local' heap.
*/
_ASSERTE(_CrtIsValidHeapPointer(pUserData));
При компиляции с MinGW-GCC полученный exe-файл запускается без ошибок (строка «After: ...» показывает то же значение для ptr, что и «Before».: ..." линия).