内存泄漏跟踪

时间:2013-01-29 16:33:43

标签: c++ new-operator

我已将我的运算符new []重写为

void* operator new[](std::size_t sz, const char *file, int line)

{
    void* mem = malloc(sz);

    if(mem == 0){
            printf("Could not allocate the desired memory, the new operator fails\n");
            std::abort();
        }
    printf("Allocation has been done!\n");
    printf("Allocation has been done! In %s, line #%i, %p[%i]\n", file, line, mem, sz);
    return mem;

}
#define DEBUG_NEW2 new[](__FILE__, __LINE__)
#define new[] DEBUG_NEW2

我的程序主要使用这种类型的新运算符,这就是为什么我更关心它。 但是,编译器给我“宏名称[-Werror]”错误消息后“丢失了空白”。我试着玩“#define new [] DEBUG_NEW2”。在某些情况下,它编译好,但我没有被覆盖的新[]然后。

1 个答案:

答案 0 :(得分:2)

这里的问题是以#define new[]

开头的行

您正在尝试创建名为new[]

的宏

首先,这是非法的,因为宏名称必须是有效的标识符,这意味着它只包含字母,下划线,数字,并且不能以数字开头。

其次,您试图为关键字赋予新的含义。这是不允许的,意味着您的程序无效或给出了未定义的行为。

不需要添加这样的宏来重载运算符new []。实际上,您需要做的就是在所需范围内声明一个带有签名void* operator new[](size_t)的函数,并且它将自动调用以进行数组分配。