STL вызывает delete NULL;

Тема в разделе "WASM.ZEN", создана пользователем kropalik, 5 сен 2006.

  1. kropalik

    kropalik New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    155
    Адрес:
    msk
    Код (Text):
    1. #include    <stdio.h>
    2. #include    <windows.h>
    3. #include    <vector>
    4.  
    5. void*   __cdecl operator new(unsigned int size)
    6. {
    7. void*   result;
    8.  
    9.     result=HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,size);
    10.     printf("new: addr=%X size=%X\n",result,size);
    11.     return result;
    12. };
    13.  
    14. void    __cdecl operator delete(void* addr)
    15. {
    16.  
    17.     printf("del: addr=%X\n",addr);
    18.     HeapFree(GetProcessHeap(),0,addr);
    19.  
    20. };
    21.  
    22. void    main()
    23. {
    24. std::vector<int>    *x;
    25.  
    26.     x=new std::vector<int>;
    27.     delete x;
    28.  
    29. };
    new: addr=1430B8 size=10
    del: addr=0
    del: addr=1430B8
    Press any key to continue

    все конечно нормально HeapFree понимает
    такую ситуацию. проблема возникла при моей
    собственоой реализации кучи. как бы заставить
    STL так не делать ?
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    kropalik
    Собственно, это не ошибка - delete проверяет параметр на 0.
     
  3. Kmet

    Kmet New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2006
    Сообщения:
    28
    Адрес:
    Belarus
    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 таскать?
     
  4. kropalik

    kropalik New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    155
    Адрес:
    msk
    я уже исправил. просто в процессе
    отладки самопальной HeapAlloc/HeapFree
    обнаружились непонятные глюки.
    вот и подумал что может лучше исправить
    причину (вызов delete NULL) чем следствие....