обнаружено повреждение кучи | C ++ - PullRequest
8 голосов
/ 04 марта 2012

Я получаю это сообщение "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 Ответ

16 голосов
/ 04 марта 2012

«Повреждение кучи» обычно означает, что вы записали в нераспределенную память, повреждая структуры данных, используемые для работы распределителя памяти.

Могут быть и другие проблемы, но первая, которую я вижу, находится в этой строке:

strcpy(buffer, n);

Это будет записывать strlen(n) + 1 байтов в buffer, но buffer имеет длину всего strlen(n) байтов (дополнительный байт является завершающим \0.). Запись этого байта приводит к неопределенному поведению и вполне может испортить кучу.

...