运行此代码后,我收到“检测到堆损坏
”消息:
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";
“检测到堆损坏”是什么意思?
最佳答案
“堆损坏”通常意味着您写入未分配的内存,破坏了用于使内存分配器工作的数据结构。
可能还有更多问题,但我看到的第一个是在这一行:
strcpy(buffer, n);
这会将 strlen(n) + 1
字节写入 buffer
,但是 buffer
只是 strlen(n)
字节长(额外字节是终止 \0
。)写入该额外字节会导致未定义的行为,并且很可能会损坏堆。
关于c++ - 检测到堆损坏 | C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9551941/