检测到堆损坏|C++

heap corruption detected | C++

本文关键字:C++ 损坏 检测      更新时间:2023-10-16

运行以下代码后,我得到这个"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 = '';
    }
    delete buffer;       //  <- heap corruption detected
    return *this;
}

这就是我所说的方法:

uli x;
x = "9876123";

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

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

可能还有更多的问题,但我看到的第一个问题是:

strcpy(buffer, n);

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