Код (Text): #include <stdio.h> #include <windows.h> #include <vector> void* __cdecl operator new(unsigned int size) { void* result; result=HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,size); printf("new: addr=%X size=%X\n",result,size); return result; }; void __cdecl operator delete(void* addr) { printf("del: addr=%X\n",addr); HeapFree(GetProcessHeap(),0,addr); }; void main() { std::vector<int> *x; x=new std::vector<int>; delete x; }; new: addr=1430B8 size=10 del: addr=0 del: addr=1430B8 Press any key to continue все конечно нормально HeapFree понимает такую ситуацию. проблема возникла при моей собственоой реализации кучи. как бы заставить STL так не делать ?
The first function is called by a delete expression to render the value of _Ptr invalid. The program can define a function with this function signature that replaces the default version defined by the Standard C++ Library. The required behavior is to accept a value of _Ptr that is null or that was returned by an earlier call to operator new(size_t). Если и можно отучить библиотеку от такого поведению, то это все равно будет частным решением для твоей реализации STL. Собираешься вместе исходниками и свою STL таскать?
я уже исправил. просто в процессе отладки самопальной HeapAlloc/HeapFree обнаружились непонятные глюки. вот и подумал что может лучше исправить причину (вызов delete NULL) чем следствие....