检测到堆损坏| C ++

时间:2012-03-04 02:58:19

标签: c++ heap corruption

运行此代码后,我收到此“heap corruption detected”消息:

uli& uli::operator =(char* n)
{
    char* buffer = new char[strlen(n)];

    char* p;
    int op;
    int coef;

    strcpy(buffer, n);

    while(*buffer)
    {
        op = strlen(buffer) - 5;
        p = (op >= 0) ? op+buffer : buffer;
        coef = atoi(p);

        if(coef > 65535)
            coef = atoi(++p);

        push(head, coef);
        *p = '\0';
    }

    delete buffer;       //  <- heap corruption detected

    return *this;
}

这就是我调用方法的方法:

uli x;
x = "9876123";

“检测到堆损坏”是什么意思?

1 个答案:

答案 0 :(得分:16)

“堆损坏”通常意味着您写入未分配的内存,损坏用于使内存分配器工作的数据结构。

可能会有更多问题,但我看到的第一个问题就在这一行:

strcpy(buffer, n);

这会将strlen(n) + 1个字节写入buffer,但buffer只有strlen(n)个字节长(额外的字节是终止\0。)额外字节会导致未定义的行为,并且可能会破坏堆。