操作员删除导致堆损坏,而操作员新工作正常

Jay*_*ker 5 c++ new-operator

我有操作员新工作,但一旦我调用删除,它就崩溃了free (ptr).在这个Base类中重载operator new和delete时,任何人都可以告诉我做错了什么吗?提示:我不是在询问设计问题.

class Base {
private: 
    int i;

public:  
    Base () : i (10) {
    }

    static void * operator new (size_t size) {  
       if (size = 0) size = 1;  // please read this line carefully! size = 0!
       return malloc (size);  
    }

    static void operator delete (void *ptr, size_t size) {
       if (ptr == NULL) return;
       free (ptr);
    }
};
Run Code Online (Sandbox Code Playgroud)