c++ - 重载 new 和 delete 时堆崩溃

标签 c++ overloading new-operator operator-keyword

<分区>

我在重载删除的删除调用中遇到堆崩溃。请帮我解决这个问题。

class number {
    int *series;
public:
    void* operator new(size_t size){
        number *n = ::new number;
        n->series = new int[size];
        printf("new %p %p\n", n, n->series);
        return n;
    }
    void operator delete(void *ptr) {
        number *n = (number*)ptr;
        printf("delete %p %p\n", n, n->series);
        delete (int*)n->series;// why crash here?
        ::delete n;
    }
};

int main() {
    number *n= new number;
    delete n;
    return 0;
}

最佳答案

您使用 new int[size]series 分配为数组。所以你必须把它作为一个释放:delete [] n->series

(我不确定为什么要在那里进行强制转换,但这是个坏主意。如果你告诉编译器忽略你的错误,它只会让事情变得更难。)

关于c++ - 重载 new 和 delete 时堆崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37091310/

相关文章:

c++ - 为什么有些类方法返回 "*this"(自身的对象引用)?

c++ - 对 QImage 执行深拷贝

c++ - DLL_PROCESS_ATTACH 无法在 Windows 7 C++ 上执行

c++ - 为什么 C++ lambda 重载的行为不如预期?

c++ - 重载==递归比较两个链表

Java 方法重载作为组合的用户输入

ios - XCode iOS operator 新的自定义实现

c++ - 重载 "new"运算符

c++ - 请提出一些算法来找到树中所有节点中到最远节点的距离最小的节点

C#:哪些数据类型需要NEW来分配内存?