Jon*_*nas 8 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;
}
Run Code Online (Sandbox Code Playgroud)
这就是我调用方法的方法:
uli x;
x = "9876123";
Run Code Online (Sandbox Code Playgroud)
"检测到堆损坏"是什么意思?
Ern*_*ill 16
"堆损坏"通常意味着您写入未分配的内存,损坏用于使内存分配器工作的数据结构.
可能会有更多问题,但我看到的第一个就是这一行:
strcpy(buffer, n);
Run Code Online (Sandbox Code Playgroud)
这将写入strlen(n) + 1字节buffer,但buffer只是strlen(n)字节长(额外的字节是终止\0.)写入额外的字节会导致未定义的行为,并可能破坏堆.
| 归档时间: |
|
| 查看次数: |
27298 次 |
| 最近记录: |